当我在Razor模板顶部设置ViewBag.Title
时,Model.Title
编辑器模板文本框将使用ViewBag.Title
的值而不是预期的Model.Title
值进行填充。明确调用Html.EditorFor(x => Model.Title)
不会产生此行为。
如果不为我的模型维护自定义编辑器模板,如何阻止我的编辑器模板显示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 *@
答案 0 :(得分:7)
Html.EditorFor
使用的值可以来自三个位置:ModelState
,ViewData
和Model
。顺便说一下,ViewData
和ViewBag
是相同的东西,两种与同一基础字典交互的方式。
因此,为了避免在处理表单时发生冲突,您可以使用模型,也可以使用前缀,例如ViewBag._Title
。
在这种情况下ViewBag.Title
用于与布局共享数据,您也可以执行Page.Title
而无需担心更改视图数据。
答案 1 :(得分:2)
避免这种情况的简单方法就是不使用ViewBag
。
ViewBag
是一个动态对象,它确实优先。但是你可以在里面填充任何东西,而且调试变得很困难。
底线:如果您需要显示动态内容,例如标题,请将其放入Model
。