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应该优先考虑吗?
答案 0 :(得分:5)
Html.TextBox首先检查ViewData
/ ViewBag
值,然后检查Model
。要确保其值Model
,您必须使用Html.TextBoxFor
。