17

当我ViewBag.Title在 Razor 模板的顶部设置时,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 *@
4

3 回答 3

7

使用的值Html.EditorFor可以来自三个地方ModelStateViewDataModel。顺便说一句,ViewDataViewBag同一个底层字典交互的两种方式是相同的。

因此,为避免在使用表单时发生冲突,您可以使用 Model 代替,也可以使用前缀,例如ViewBag._Title.


在这种情况下ViewBag.Title用于与布局共享数据,您也可以Page.Title不用担心更改视图数据。

于 2013-01-17T02:03:09.663 回答
3

ViewBag.Title作业移到页面底部对我有用。

于 2015-04-30T16:46:27.067 回答
2

避免这种情况的简单方法就是不使用ViewBag.

ViewBag是一个动态对象,它确实具有优先权。但是您几乎可以在其中填充任何东西,并且很难调试。

底线:如果你需要显示一些动态的东西,比如标题,把它放在你的Model.

于 2013-01-04T09:50:02.167 回答