asp.net-mvc-3 - 带有自动完成字段的 MVC 验证

标签 asp.net-mvc-3 autocomplete validation

我在模型验证方面遇到了一个小问题。

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

theID 是存储在数据库中的字段,并且是“必需”的字段,所以我使用:@Html.ValidationMessage("theID")

问题是 CSS 类 input-validation-error 被分配给了隐藏字段。我现在这种行为是正常的,也是意料之中的,但有办法改变吗?

我想要完成的是 theDesc 字段显示输入错误类。这样用户就可以注意到丢失了。

没什么大不了的,但我的强制症让我发疯,因为没有以相同的风格出现所有错误。

最佳答案

好问题,措辞很好!我有完全相同的问题,但还没有明确的答案。我设法做到了 - 至少使用服务器端验证 - 通过在 Controller 和 View 中使用 HTML 帮助程序而不是自定义 HTML 添加服务器端验证。这篇文章帮助了我:

.input-validation-error to a textbox when the form is redisplayed for failed value

如帖子中所述,有必要设置 html 的名称,例如模型字段正确。所以我在 Controller 中添加了一些服务器端验证代码。请注意选中的字段 model.theID 与 ModelState "TheDesc"中添加的名称有何不同:

Controller 代码:

public ActionResult SomeActionIndex(SomeModel model) {
   ...
   if (string.IsNullOrEmpty(model.theID) {
        ModelState.AddModelError("theDesc", "The field is uhm... required!");
   }
   ...
}

帖子中的评论表明,为了突出显示(通过 CSS 类的红色边框),使用标准 HTML 帮助程序会有所帮助,因为它们会自动启用 jQuery 验证的使用。
在我的情况下,经过验证的自动完成列表最初不是使用 HTML 帮助程序生成的,而是使用嵌套 View 中的一些自定义 HTML 生成的。我改变了这个。

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

@Html.TextBoxFor(m => Model.theID, new { @style = "display: none" })

注意:正是 HTML 帮助程序为完成这项工作所做的那种黑魔法,我还没有弄清楚。所以我会把它留到以后,或者留给其他人,但我认为这个问题与它有关:

custom htmlhelper with validation support

关于asp.net-mvc-3 - 带有自动完成字段的 MVC 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9978571/

相关文章:

asp.net-mvc-3 - MVC 3 + EF 4.1 + POCO + ViewModel 模式 + 带脚手架的 Controller == 困惑!

object - Primefaces 自动完成展示选择了错误的国家/地区对象

validation - Codeigniter 自定义表单验证

javascript - 如何在 mootools 中扩展在 "options"内声明的函数?

asp.net-mvc-3 - 如何让 MVC3 DisplayFor 显示枚举的 Display-Attribute 的值?

asp.net-mvc-3 - 为 MVC3 应用程序配置 Ninject 的正确方法是什么?

c# - 子网格更新时刷新父 Kendo MVC 网格

Vim 代码补全菜单

xml - 如何使 Xcode 使用自定义 DTD 进行自动完成?

javascript - 如何在 Javascript 中获取表单字段 (formData) 的图像大小