我在ASP.Net(4.0)页面中有以下代码,其中有2个按钮 - ' Button1'和' Button2',文本框,必填字段验证程序和自定义验证程序。
我希望自定义验证器仅在“按钮1'点击而不是当按钮2'单击,Button2仍需要评估必需的字段验证器。我将如何实现这一目标?
Input 1:
<asp:TextBox id="txtCustomData" runat="server" />
<asp:CustomValidator id="CustomValidator1"
runat="server" ErrorMessage="Number not divisible by 2!"
ControlToValidate="txtCustomData"
ClientValidationFunction="CheckEven" />
<br/>
Input 2:
<asp:TextBox id="TextBox2" runat="server" />
<asp:RequiredFieldValidator ID="rfv1" runat="server" ControlToValidate="TextBox2"
ErrorMessage="* Required" ForeColor="Red" >
</asp:RequiredFieldValidator>
<br/>
<br/>
<asp:Button id="btn1" runat="server" Text="Button1" />
<br/>
<asp:Button id="btn2" runat="server" Text="Button2" />
<script language="javascript">
<!--
function CheckEven(source, args) {
var val = parseInt(args.Value, 10);
if (isNaN(val)) {
args.IsValid = false;
}
else {
args.IsValid = ((val % 2) == 0);
}
}
// -->
</script>
更新1: 虽然Rick的回答是一个可能的答案,但我找到了另一种处理这种情况的方法。
当两个按钮需要验证2个不同的验证器且其中一个验证器是自定义验证器时,我可以 使用验证组 。设置ValidationGroup =&#34; Group1&#34;对于Button1,需要评估自定义验证器和ValidationGroup =&#34; Group2&#34;对于需要评估所需字段验证器的Button2,并为相应的验证器包含相同的值。没有必要为文本框包含ValidationGroup。
Input 1:
<asp:TextBox id="txtCustomData" runat="server" />
<asp:CustomValidator id="CustomValidator1"
runat="server" ErrorMessage="Number not divisible by 2!"
ControlToValidate="txtCustomData"
ClientValidationFunction="CheckEven" />
<br/>
Input 2:
<asp:TextBox id="TextBox2" runat="server" />
<asp:RequiredFieldValidator ID="rfv1" runat="server" ControlToValidate="TextBox2"
ErrorMessage="* Required" ForeColor="Red" ValidationGroup="Group2">
</asp:RequiredFieldValidator>
<br/>
<br/>
<asp:Button id="btn1" runat="server" Text="Button1" ValidationGroup="Group1"/>
<br/>
<asp:Button id="btn2" runat="server" Text="Button2" ValidationGroup="Group2"/>
<script language="javascript">
<!--
function CheckEven(source, args) {
var val = parseInt(args.Value, 10);
if (isNaN(val)) {
args.IsValid = false;
}
else {
args.IsValid = ((val % 2) == 0);
}
}
// -->
</script>
更新2: 如果你在按钮 的OnClientClick事件中使用自定义javascript结束 ,那么你需要小心你的javascript,否则你的按钮永远不会回发,即使数据也是如此已验证。
例如,如果你编写了一个名为&#39; ValidateData()&#39;的自定义javascript函数。然后首先确保它总是返回true或返回false语句,然后你的OnClientClick应该以下面显示的方式使用这个函数。 大多数开发人员只需使用OnClientClick =&#34;返回ValidateData();&#34;这将使ASP.Net按钮永远不会执行ASP.Net回发,即使数据被评估为有效,因为ASP.Net中的默认__doPostBack JavaScript函数永远不会被调用(假设UseSubmitBehavior =&# 34; false&#34;对于此按钮,如果UseSubmitBehavior =&#34; true&#34;则不使用__doPostBack并且按钮将回发)。
<asp:Button id="btn1" runat="server" Text ="Button1"
OnClientClick="var r = ValidateData(); if (!r) { return false; } " />
<script type=<script type="text/javascript">
function ValidateData( )
{
var x = document.getElementById('xy1');
if(x.value == '1')
{
return false;
}
return true;
}
</script>
答案 0 :(得分:3)
包含CausesValidation
属性并将其设置为False。您的按钮不会触发验证。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.causesvalidation(v=vs.110).aspx
<asp:Button id="btn2" runat="server" Text="Button2" CausesValidation="False"/>