_layout.cshtml模板中的动态数据可在使用该模板的所有页面上使用

时间:2018-08-20 20:34:56

标签: c# razor-pages

首先,我澄清我不是直接使用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使用。

任何建议都将受到欢迎。

1 个答案:

答案 0 :(得分: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 ())