【问题标题】:Dynamic data in the _layout.cshtml template to be available on all pages that use this template_layout.cshtml 模板中的动态数据可用于使用此模板的所有页面
【发布时间】:2018-08-20 20:34:56
【问题描述】:

首先我澄清一下,我不是直接使用 MVC,而是使用 Razor Pages。

我正在考虑在 _Layout.cshtml 模板中获取动态数据(数据库)的最佳方法,以便它们在所有页面上都可用:

1)我的第一个选择是创建一个PartialView,我们称之为_Header.cshtml,测试内容如下:

   @page
    @model _HeaderModel
    <div id = "header">
        @ Model.HeaderMessage
    </ div>

并在 _Layout.cshtml 模板中使用:

@await Html.PartialAsync ("_ Header", new _HeaderModel ())

但是,这会导致错误:

“对象引用未设置为对象的实例。”,我不太明白,因为在方法中传递了一个新的_HeaderModel()实例

不应该工作吗?如果我没有指定 _IndexModel 和 _HeaderModel 之间发生模型错误:ViewDataDictionary 实例需要 _HeaderModel 类型的模型项。

这是一个好方法吗?如果是,为什么不呢?

2)在我看来,我的第二个选择是创建一个 PageModel 基础,其属性将被从 PageModel 基础继承的所有 PagesModel 使用。

欢迎提出任何建议。

【问题讨论】:

    标签: c# razor-pages


    【解决方案1】:

    我不知道这是否是 Visual Studio 错误,即使我明确添加了 PartialView,Visual Studio 在 PartialView 中包含@page,这就是导致错误的原因。

    _Header.cshtml

    @page //已删除

             @model _HeaderModel
    
             <div id="header">
                 @Model.HeaderMessage
             </div>
    

    现在可以了

    _Layout.cshtml

    @await Html.PartialAsync ("_ Header", new _HeaderModel ())
    

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多