Asp.net mvc ViewBag.Title值覆盖ASP.NET MVC编辑器模板的Model.Title
当我在Razor模板顶部设置Asp.net mvc ViewBag.Title值覆盖ASP.NET MVC编辑器模板的Model.Title,asp.net-mvc,viewbag,mvc-editor-templates,editorformodel,Asp.net Mvc,Viewbag,Mvc Editor Templates,Editorformodel,当我在Razor模板顶部设置ViewBag.Title时,使用ViewBag.Title的值而不是预期的Model.Title值填充Model.Title编辑器模板文本框。显式调用Html.EditorFor(x=>Model.Title)不会产生这种行为 如何防止编辑器模板显示ViewBag.Title值而不维护模型的自定义编辑器模板 代码 避免这种情况的简单方法就是不要使用ViewBag ViewBag是一个动态对象,它具有优先权。但是你几乎可以把任何东西都塞进里面,这样就很难调试了 一句话
ViewBag.Title
时,使用ViewBag.Title
的值而不是预期的Model.Title
值填充Model.Title
编辑器模板文本框。显式调用Html.EditorFor(x=>Model.Title)
不会产生这种行为
如何防止编辑器模板显示ViewBag.Title
值而不维护模型的自定义编辑器模板
代码
避免这种情况的简单方法就是不要使用
ViewBag
ViewBag
是一个动态对象,它具有优先权。但是你几乎可以把任何东西都塞进里面,这样就很难调试了
一句话:如果您需要显示动态的内容,例如标题,请将其放在
模型中Html.EditorFor
使用的值可以来自三个位置:ModelState
、ViewData
和Model
。顺便说一句,ViewData
和ViewBag
是同一件事,是与同一基础词典交互的两种方式
因此,为了避免使用表单时发生冲突,您可以改用Model,也可以使用前缀,如ViewBag.\u Title
在这种情况下,ViewBag.Title
用于与布局共享数据,您也可以执行Page.Title
,而无需担心更改视图数据。将ViewBag.Title
分配移动到页面底部对我来说很有效。我使用ViewBag.Title
作为主布局模板中显示的HTML
元值。ViewData[“Title”]
能避免这个问题吗?我最终只是用ViewBag.PageTitle
而不是ViewBag.Title
来解决这个问题。太棒了!页码.标题
@{
ViewBag.Title = "Edit Post " + Model.Title;
}
@Html.EditorFor(x => Model.Title) @* renders "My Title" text box *@
@Html.EditorFor(x => Model) @* renders "Edit Post My Title" text box *@