我在尝试发布的表单中出现问题。在表单无法验证的情况下,我采用标准的调用方式,ModelState.AddModelError()
然后返回 View 结果。
问题是,HTML.* 助手应该在渲染时获取发布的值,我注意到我的文本字段只有在我将它们包含在回发操作的参数列表中时才会这样做,这不应该是必需的看到某些表单有太多字段,不想将它们全部列为参数。
我的操作代码大致是:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditDataDefinition(long? id, string name)
{
var dataDefinition = ...
// do some validation stuff
if (!ModelState.IsValid)
{
// manually set checkbox fields via ViewData seeing as this STILL doesn't work in MC 1.0 :P
// ...
return View(dataDefinition);
}
}
现在,dataDefinition(它是一个 LINQ to SQL 实体)有一个字段MinVolume,在视图中由以下行处理:
Minimum: <%= Html.TextBox("MinVolume", null, new { size = 5 })%>
然而,当 ModelState 验证失败后呈现视图时,在我们发布的原始页面上键入的值不会保留,除非我将其作为参数包含在回发方法中。从字面上看,我可以通过这样做“解决问题”:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditDataDefinition(long? id, string name, string minVolume)
出于某种原因,这将强制保留字段值。这对我来说似乎很愚蠢,因为我的表单具有比这更多的值,而且我不应该只为该字段添加参数。
有任何想法吗?