我在尝试发布的表单中出现了一个问题。在表单无法验证的情况下,我采用标准的调用路线ModelState.AddModelError()
然后返回一个查看结果。
问题是, 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 实体)有一个字段最小体积,在视图中由这一行处理:
Minimum: <%= Html.TextBox("MinVolume", null, new { size = 5 })%>
然而,当 ModelState 验证失败后呈现视图时,我们发布的原始页面上输入的值不会保留,除非我将其作为参数包含在回发方法中。从字面上看,我可以通过这样做来“解决问题”:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditDataDefinition(long? id, string name, string minVolume)
由于某种原因,这将强制保留字段值。这对我来说似乎很愚蠢,因为我的表单具有更多的值,而且我不应该只为该字段添加参数。
有任何想法吗?