我有这个Asp.Net webforms代码:
<div class="content-wrapper">
<asp:Panel runat="server">
<asp:TextBox runat="server" ID="txt1" />
<asp:RequiredFieldValidator runat="server" ValidationGroup="fgEm1" ControlToValidate="txt1" ErrorMessage="Required" />
<asp:Button runat="server" Text="Confirm my email" ValidationGroup="fgEm1" CssClass="btn btn-success" ID="btnConfirm1" />
</asp:Panel>
<asp:Panel runat="server">
<asp:TextBox runat="server" ID="txt2" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ValidationGroup="fgEm2" runat="server" ControlToValidate="txt2" ErrorMessage="Required" />
<asp:Button runat="server" Text="Confirm my email" ValidationGroup="fgEm2" CssClass="btn btn-success" ID="btnConfirm2" />
</asp:Panel>
</div>
当我点击第一个按钮时,我需要这是好的。现在当我点击第二个按钮时,我看到第二个文本框旁边需要,但第一个文本框被隐藏了。我不要那个。我希望第一个应该保持不变。
有没有办法实现这个目标?
答案 0 :(得分:0)
当btnConfirm2单击时,仅验证作为fgEm2一部分的验证控件,同样btnConfirm1仅点击了验证控件,这些控件是fgEm1的一部分。 如果你想一次验证两个控件,那么你必须强制它们检查你使用javascript的所有验证控件,或者在按钮点击中检查两个验证:
<强>使用Javascript:强>
function fnJSOnFormSubmit() {
var isGrpOneValid = Page_ClientValidate("fgEm1");
var isGrpTwoValid = Page_ClientValidate("fgEm2");
if (isGrpOneValid && isGrpTwoValid)
return true; //postback only when BOTH validations pass.
else
return false;
}
并在onclientclick事件中调用此函数。
按钮点击活动:
protected void Button_Click(object sender, EventArgs e)
{
switch (((Button)sender).ID)
{
case "btnConfirm1":
if (RequiredFieldValidator1.IsValid)//RequiredFieldValidator1 is the ID of first validator
{
// write your code
}
else
{
//Write your code.
}
break;
case "btnConfirm2 ":
if (RequiredFieldValidator2.IsValid && RequiredFieldValidator1.IsValid)// RequiredFieldValidator2 is the ID of second validator
{
//do your code
}
else
{
//do your code
}
break;
default:
//do your code
break;
}
}
这组代码也可以帮助你
var i;
for (i = 0; i < Page_Validators.length; i++) {
ValidatorValidate(Page_Validators[i]); //this forces validation in all groups
}
// use this inside javascript function or in buttonclick event
此链接将为您提供更多帮助: https://msdn.microsoft.com/en-us/library/0ke7bxeh(v=vs.110).aspx
答案 1 :(得分:0)
@Jack我没有改变验证组的工作方式。验证组是一组验证器,而不是控件。你能做的绝对最简单的事就是这个小小的变化:
<div class="content-wrapper">
<asp:Panel runat="server">
<asp:TextBox runat="server" ID="txt1" />
<asp:RequiredFieldValidator runat="server" ValidationGroup="fgEm1" ControlToValidate="txt1" ErrorMessage="Required" display="dynamic" />
<asp:Panel runat="server">
<asp:TextBox runat="server" ID="txt2" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ValidationGroup="fgEm2" runat="server" ControlToValidate="txt2" ErrorMessage="Required" />
<asp:Button runat="server" Text="Confirm my email" ValidationGroup="fgEm2" CssClass="btn btn-success" ID="btnConfirm2" />
</asp:Panel>
</div>
通过动态显示设置,验证器可以轻松更换。当第一个不在第二个按钮组内时保持第一个可见违反了验证组的工作方式。