ASP.NET MVC 3模型绑定 - 与输入id ="Title"的ViewBag.Title冲突

awr*_*ley 5 model-binding name-clash viewbag asp.net-mvc-3

ViewBag动态属性似乎存在问题.让我们说:

@{
    ViewBag.Title = @Model.CourseName;
}
Run Code Online (Sandbox Code Playgroud)

然后在页面上我有一个表格:

@Html.TextBox("Title", null, new {style="width:400px;"})
Run Code Online (Sandbox Code Playgroud)

其中Title是数据库表中字段的名称.

首次打开页面时,ID为"Title"的文本框将获取ViewBag.Title动态属性的值.

我对模型绑定的确切细节有点模糊,但这似乎是一个错误,或者如果没有,如果它是由于绑定过程而自然发生的事情,那么警告它会很好这个.

我找到的工作是将ViewBag属性重命名为:

@{
    ViewBag.Titulo = @Model.CourseName;
}
Run Code Online (Sandbox Code Playgroud)

(标题改为Titulo - 总是很高兴知道另一种语言以避免姓名冲突......)

问题消失了.

但问题是:

这种行为是期待的吗?这个漏洞很容易找到(花了一个小时来弄清楚,包括写这个问题),但我怀疑其他漏洞可能更多,嗯,晦涩难懂.

编辑:

解释这个问题:

Model Binder是否自动绑定它在ViewBag中找到的属性?即使强类型ViewModel中存在现有属性,我已经传递到页面?当然ViewModel应该优先考虑吗?

Luk*_*tný 5

Html.TextBox 首先检查ViewData/ ViewBag值,然后Model.为了确保它具有Model价值,您必须使用Html.TextBoxFor.