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

时间:2011-02-24 11:17:11

标签: asp.net-mvc-3 model-binding viewbag name-clash

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

@{
    ViewBag.Title = @Model.CourseName;
}

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

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

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

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

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

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

@{
    ViewBag.Titulo = @Model.CourseName;
}

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

问题消失了。

然而,问题是:

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

编辑:

改述问题:

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

1 个答案:

答案 0 :(得分:5)

Html.TextBox首先检查ViewData / ViewBag值,然后检查Model。要确保其值Model,您必须使用Html.TextBoxFor