首页 文章

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

提问于
浏览
1

首先,我澄清一点,我不是直接使用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 base继承的所有PagesModel使用 .

任何建议都会受到欢迎 .

1 回答

  • 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 ())
    

相关问题