Sun*_*nil 0 asp.net customvalidator
我的 ASP.Net (4.0) 页面中有以下代码,其中有 2 个按钮 - 'Button1' 和 'Button2'、一个文本框、一个必填字段验证器和一个自定义验证器。
我希望自定义验证器仅在单击“Button1”时触发,而不是在单击“Button2”时触发,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>
Run Code Online (Sandbox Code Playgroud)
更新 1: 虽然 Rick 的回答是一个可能的答案,但我找到了另一种处理这种情况的方法。
当两个按钮都需要验证 2 个不同的验证器并且其中一个验证器是自定义验证器时,我可以使用验证组。为需要评估自定义验证器的 Button1 设置 ValidationGroup="Group1",为需要评估所需字段验证器的 Button2 设置 ValidationGroup="Group2",并为相应的验证器包含相同的值。不需要为文本框包含 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>
Run Code Online (Sandbox Code Playgroud)
更新 2: 如果您最终在按钮的 OnClientClick 事件中使用自定义 javascript,那么您需要小心使用 javascript,否则即使数据有效,您的按钮也可能永远不会回发。
例如,如果您编写了一个名为“ValidateData()”的自定义 javascript 函数,则首先确保它始终在其中包含 return true 或 return false 语句,然后您的 OnClientClick 应以如下所示的方式使用此函数。大多数开发人员将简单地使用 OnClientClick = "return ValidateData();" 这将使 ASP.Net 按钮永远不会执行 ASP.Net 回发,即使数据被评估为有效,因为 ASP.Net 中的默认 __doPostBack JavaScript 函数永远不会被调用(假设此按钮的 UseSubmitBehavior="false" ,如果 UseSubmitBehavior="true" 则不使用 __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>
Run Code Online (Sandbox Code Playgroud)
包括该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"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8064 次 |
| 最近记录: |