我的模型验证存在一个小问题。
我有一个名为“theID”的隐藏字段和一个名为“theDesc”的文本框。字段theDesc是一个自动完成,当我选择它时,ID会存储id。
theID是存储在数据库中的字段,是“Requiered”的字段,因此我使用:@ Html.ValidationMessage(“theID”)
问题是CSS类input-validation-error被分配给隐藏字段。我现在这种行为是正常的和预期的,但有一种方法可以改变它吗?
我想要完成的是theDesc字段显示输入错误类。通过这种方式,用户可以注意到丢失了。
不是什么大不了的事,但是我的强迫症让我很生气,没有得到同样风格的所有错误。
答案 0 :(得分:2)
好问题,很好地措辞!我有完全相同的问题,但还没有看到确定的答案。我设法做到了 - 至少在服务器端验证 - 通过在控制器和视图中使用HTML帮助程序而不是自定义HTML添加服务器端验证。这篇文章帮助了我:
.input-validation-error to a textbox when the form is redisplayed for failed value
如帖子中所述,有必要设置html的名称,例如模型字段正确。所以我在控制器中添加了一些服务器端验证代码。注意checked字段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助手为完成这项工作所做的那种黑魔法我还没弄清楚。所以我会把它留到以后,或者留给其他人,但我认为这个问题与它有关:
答案 1 :(得分:0)
在自动填充的更改事件中,将该值分配给隐藏字段。