Asp.net mvc 3 具有自动完成字段的MVC验证

Asp.net mvc 3 具有自动完成字段的MVC验证,asp.net-mvc-3,autocomplete,validation,Asp.net Mvc 3,Autocomplete,Validation,我对模型验证有一个小问题 我有一个名为“theID”的隐藏字段和一个名为“theDesc”的文本框。Desc字段是一个自动完成的字段,当我选择它时,就会得到存储的id theID是存储在数据库中的字段,是“required”字段,因此我使用:@Html.ValidationMessage(“theID”) 问题是CSS类输入验证错误被分配给隐藏字段。我现在知道这种行为是正常的,也是意料之中的,但有办法改变吗 我想要完成的是theDesc字段显示输入错误类。通过这种方式,用户可以注意到缺少的内容

我对模型验证有一个小问题

我有一个名为“theID”的隐藏字段和一个名为“theDesc”的文本框。Desc字段是一个自动完成的字段,当我选择它时,就会得到存储的id

theID是存储在数据库中的字段,是“required”字段,因此我使用:@Html.ValidationMessage(“theID”)

问题是CSS类输入验证错误被分配给隐藏字段。我现在知道这种行为是正常的,也是意料之中的,但有办法改变吗

我想要完成的是theDesc字段显示输入错误类。通过这种方式,用户可以注意到缺少的内容


这没什么大不了的,但我的强迫症让我抓狂,因为我没有得到相同风格的所有错误。

在自动完成的更改事件中,将该值指定给隐藏字段。

问得好,措辞也很好!我有完全相同的问题,但还没有看到明确的答案。我通过在控制器和视图中使用HTML助手(而不是自定义HTML)添加服务器端验证,至少通过服务器端验证做到了这一点。这篇文章帮助了我:

正如文章中提到的,有必要正确设置html的名称,例如模型字段。因此,我在控制器中添加了一些服务器端验证代码。请注意,选中的字段model.theID与ModelState“TheDesc”中添加的名称不同:

控制器代码:

public ActionResult SomeActionIndex(SomeModel model) {
   ...
   if (string.IsNullOrEmpty(model.theID) {
        ModelState.AddModelError("theDesc", "The field is uhm... required!");
   }
   ...
}
文章中的注释表明,对于突出显示(通过CSS类的红色边框),使用标准HTML帮助程序会有所帮助,因为这些帮助程序会自动启用jQuery验证。 在我的例子中,验证的自动完成列表最初不是使用HTML助手生成的,而是嵌套视图中的一些自定义HTML。我改变了这个

查看代码:

@Html.TextBoxFor(m => Model.theDesc, new { @class="auto-complete", 
@placeholder="choose a value..." })

@Html.TextBoxFor(m => Model.theID, new { @style = "display: none" })
注意:正是HTML助手为实现这一点所做的那种黑魔法,我还没有弄清楚。所以我会留到以后,或者其他人,但我认为这个问题与之相关:


我希望有一个“开箱即用”的解决方案,而不是定制javascript或类似的解决方案。我有很多表格。如果ID是隐藏字段,那么你可以考虑删除所需的属性来编辑帖子以使其更加清晰。