我在尝试发布的表单中突然出现问题。在表单未验证的情况下,我将采用调用 ModelState.AddModelError()
然后返回 View 结果的标准路线。
问题是,HTML.* 助手应该在呈现时获取发布的值,我注意到我的文本字段只有在我将它们包含在回发操作的参数列表中时才会这样做,这不应该不需要看到一些表单有太多字段想要将它们全部列为参数。
我的 Action 代码大致是:
[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,在 View 中由以下行处理:
Minimum: <%= Html.TextBox("MinVolume", null, new { size = 5 })%>
然而,当在 ModelState 验证失败后呈现 View 时,在我们发布的原始页面上输入的值不会保留,除非我将它作为参数包含在回发方法中。从字面上看,我可以通过这样做“解决问题”:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditDataDefinition(long? id, string name, string minVolume)
出于某种原因,这将强制保留字段值。这对我来说似乎很愚蠢,因为我的表单的值远不止于此,我不应该只为该字段添加参数。
有什么想法吗?
最佳答案
天哪,我刚刚改进了我的应用程序设计。 出现问题是因为您有自定义验证(我也有)。 你必须在之后添加
ModelState.AddModelError()
这个
ModelState.SetModelValue("MinVolume", ValueProvider["MinVolume"]);
看来必须如此
Mimum:<%=Html.Textbox("MinVolume")%>
仍然不确定它为什么有效,但它对我有用。
关于c# - ASP.Net MVC ModelState/Html.TextBox 回发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/834842/