mem*_*eme 22 c# asp.net validation controls webforms
ASP.NET验证器似乎不验证隐藏字段.我得到这样的消息:
无法验证由"hiddenFieldValidator"的ControlToValidate属性引用的控件"hiddenField".
我的<asp:HiddenField>页面中有一个填充客户端的值.我需要在服务器上出现一次,所以我添加了一个RequiredFieldValidator.
它不起作用!
在我看来,作为一种解决方法,我可以:
1.使用自定义验证器而不是将其绑定到隐藏字段,只需调用方法OnServerValidate;
2.使用<asp:TextBox>CSS样式display:none,它应该工作.
但我想确保我在这里没有遗漏一些东西.是否可以以与其他文本字段相同的方式验证隐藏字段?哦,也许是第三个更优雅的选择?
TIA!
Sco*_*NET 36
@Peter的回答让我思考,究竟ControlPropertiesValid检查了什么?
查看MSDN主题,除了其他内容之外,它ValidationPropertyAttribute还会查找.. Hhmm,所以如果我们只是派生HiddenField并ValidationPropertyAttribute设置为新类Value(为了我的目的),那么"一切正常".确实如此.
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Partner.UserControls {
[ValidationProperty("Value")]
public class HiddenField2 : HiddenField {
} // nothing else required other than ValidationProperty
}
Run Code Online (Sandbox Code Playgroud)
用法 - 确保注册包含控件的程序集:
<%@ Register Assembly="MyApp" Namespace="MyApp.Controls" TagPrefix="sw" %>
Run Code Online (Sandbox Code Playgroud)
在您的Page/UserControl内容中:
<sw:HiddenField2 ID="hidSomeImportantID" runat="server" />
Run Code Online (Sandbox Code Playgroud)
所有验证器都可以使用它.额外的好处是,如果您(像我一样)使用自定义验证功能,您可以轻松评估HiddenField2.Value它,因为它包含在args.Value字段中(在服务器端这是ServerValidateEventArgs).
这是我提出的解决方法,因为遗憾的是我找不到任何可靠的方法来使用RequiredFieldValidator或开箱即用的CustomValidator进行验证.如果将ControlToValidate属性保留为空,则会对您大喊大叫.您所要做的就是创建一个自定义控件,如下所示:
public class HiddenFieldValidator : RequiredFieldValidator
{
protected override bool ControlPropertiesValid()
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
通过覆盖属性有效检查以使其始终返回true,它不再关心您正在使用HiddenField,它将从中提取值并验证没有问题.
| 归档时间: |
|
| 查看次数: |
20690 次 |
| 最近记录: |