看起来ASP.NET验证器并不验证隐藏字段。我收到这样的消息:
无法验证“”
“”的ControlToValidate属性引用的hiddenFieldValidator控件“”hiddenField“”。“”
我在我的页面中有一个<asp:HiddenField>
,它在客户端填充了一些值。我需要它在服务器上出现一次,所以我给它添加了一个RequiredFieldValidator
。
但它不起作用!
在我看来,作为一种解决办法,我可以:
1.使用自定义验证器,不要将其绑定到隐藏字段,只需在OnServerValidate
上调用方法即可;
2.使用带有样式display:none
的<asp:TextBox>
,它应该可以工作。
但我想确保我没有遗漏什么。是否可以用与其他文本字段相同的方式验证隐藏字段?或许还有第三个更优雅的选择?
蒂娅!
发布于 2011-07-07 16:58:21
正如您收到的异常消息所说,似乎HiddenField
控件不能直接作为标准验证控件的目标。我会使用CustomValidator
变通方法。
发布于 2012-11-06 22:37:56
@Peter的回答让我思考,ControlPropertiesValid
到底检查什么?
看看它寻找的MSDN topic,其中包括ValidationPropertyAttribute
。嗯,所以如果我们只是从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
}
用法-确保注册包含控件的程序集:
<%@ Register Assembly="MyApp" Namespace="MyApp.Controls" TagPrefix="sw" %>
在您的Page/UserControl内容中:
<sw:HiddenField2 ID="hidSomeImportantID" runat="server" />
所有的验证器都会用到这个。增加的好处是,如果您(像我一样)正在使用自定义验证函数,则可以很容易地计算HiddenField2.Value
,因为它包含在args.Value
字段中(在服务器端,这是ServerValidateEventArgs
)。
发布于 2012-10-20 02:02:56
这是我想出的解决办法,因为不幸的是,我找不到任何可靠的方法来使用RequiredFieldValidator或CustomValidator进行开箱即用的验证。如果您将ControlToValidate属性留空,它会对您大喊大叫。您所要做的就是创建一个自定义控件,如下所示:
public class HiddenFieldValidator : RequiredFieldValidator
{
protected override bool ControlPropertiesValid()
{
return true;
}
}
通过覆盖属性valid check,使其始终返回true,它不再关心您是否正在使用HiddenField,它将从中提取值并进行验证,而不会出现问题。
https://stackoverflow.com/questions/6607984
复制相似问题