首先,我澄清我不是直接使用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使用。
任何建议都将受到欢迎。
答案 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 ())