Asp.net mvc ViewBag.Title值覆盖ASP.NET MVC编辑器模板的Model.Title

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是一个动态对象,它具有优先权。但是你几乎可以把任何东西都塞进里面,这样就很难调试了 一句话

当我在Razor模板顶部设置
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 *@