【问题标题】:How do I change what the RequiredFieldValidator control returns?如何更改RequiredFieldValidator 控件返回的内容?
【发布时间】:2011-08-27 12:31:39
【问题描述】:
我对 ASP.NET 很陌生,但我正在尝试验证表单。我已经进行了验证,但我想更改它的显示方式。我正在使用RequiredFieldValidator 控件,它生成一个带有ErrorMessage 属性的span 标记。根据我设置某些属性的方式,span 标签要么隐藏,要么使用内联 CSS 显示(display:none、visibility:hidden 等)。我不想让验证返回一个跨度,而是让 TextBox 控件的 CssClass 根据验证的结果进行更改。我不希望在我的标记中的任何地方都有与验证相关的跨度,即使是 display:none。
这可能吗?我从哪里开始实现这一目标?
谢谢!
【问题讨论】:
标签:
asp.net
visual-studio
validation
user-controls
【解决方案1】:
您不能更改RequiredFieldValidator 来更新另一个控件,如文本框,它只会更新自身或页面上有一个ValidationSummary。
获得所需输出的两个选项是:
- 使用CustomValidator control
-
Create your own validation server control 能够更新文本框的 css 类
虽然这些选项很可能都不会为您提供您正在寻找的“纯”HTML 代码,而无需任何额外的 span 或 div 标签,但只要您愿意花时间编写 JavaScript,它们将满足您的其他要求(或 jQuery)。但是,考虑到可用的替代方案(主要是通过某些框架仅在客户端进行验证),您最好还是坚持使用 ASP.NET 验证,因为它可以在服务器端强制执行验证。
第二个选项更具挑战性,但服务器控件可以在项目中的任何页面上使用,也可以包装在 DLL 中以部署到多个项目中。如果您想在多个控件上复制功能,则使用 CustomValidator 需要进行一些复制和粘贴,这可能会难以维护。
有关如何使用 jQuery 和自定义服务器控件来获得所需结果的真实示例,请转到Folding Chair Depot 上的结帐页面(您需要先将商品添加到购物车以到达那里)。当您提交表单而不填写时,无效的文本框会被分配新的 css 类,这些类会改变它们的背景颜色。但是,由于它们是服务器控件,因此无论 JavaScript 是否启用,该功能都将起作用。
【解决方案2】:
这需要更多的工作,但使用 CustomValidator 是可能的。所以你可以通过验证 js 功能获得更多的控制权。