Asp.net 在单个页面中多次放置此usercontrol时,将在此usercontrol的所有实例中激发用户控件中的必需字段验证

Asp.net 在单个页面中多次放置此usercontrol时,将在此usercontrol的所有实例中激发用户控件中的必需字段验证,asp.net,validation,user-controls,messages,multiple-instances,Asp.net,Validation,User Controls,Messages,Multiple Instances,我有usercontrol,它需要在其中进行字段验证。我在一个网页中有两个这个usercontrol的实例。现在,如果我单击第一个用户控件上的按钮,将为2个用户控件触发验证消息。但只需激发该用户控件的必需字段。请问谁能解决这个问题。 谢谢 Madhavi我认为您需要在每个字段验证控件上指定一个validationgroup属性 每个用户控件都将定义自己的验证组 解决此问题的一种方法是在usercontrol上公开一个公共属性,您可以将该属性传入验证组名称 <uc:mycontrol id

我有usercontrol,它需要在其中进行字段验证。我在一个网页中有两个这个usercontrol的实例。现在,如果我单击第一个用户控件上的按钮,将为2个用户控件触发验证消息。但只需激发该用户控件的必需字段。请问谁能解决这个问题。 谢谢
Madhavi

我认为您需要在每个字段验证控件上指定一个
validationgroup
属性

每个用户控件都将定义自己的验证组

解决此问题的一种方法是在usercontrol上公开一个公共属性,您可以将该属性传入验证组名称

<uc:mycontrol id=u1 validationgroup="valA" .. />
<uc:mycontrol id=u2 validationgroup="valB" .. />


这种方法的一个问题是,您需要将验证组添加到usercontrol页面加载中的每个验证控件。

我认为您需要在每个字段验证控件上指定一个
validationgroup
属性

每个用户控件都将定义自己的验证组

解决此问题的一种方法是在usercontrol上公开一个公共属性,您可以将该属性传入验证组名称

<uc:mycontrol id=u1 validationgroup="valA" .. />
<uc:mycontrol id=u2 validationgroup="valB" .. />


这种方法的一个问题是,您需要将验证组添加到usercontrol页面加载中的每个验证控件。

我认为验证组无法工作。。因为它是相同的用户控件,但在页面中删除了2次。任何按钮都会在两个用户控件上启动验证,我认为验证组将无法工作。。因为它是相同的用户控件,但在页面中删除了2次。任何按钮都将在两个用户控件wh

函数ValidateRadio(按钮)上启动验证
function ValidateRadio(button)
    {  
 var radioOptions = document.getElementById(button.id.split("_")[0] +'_rblPollOptions');
 var RVPollOptions = document.getElementById(button.id.split("_")[0] +'_RVPollOptions');
 var options = radioOptions.getElementsByTagName("input");
 var radioSelected=false;
  for (j=0; j < options.length; j++)
                {
                        if(options[j].checked)
                        {
                           radioSelected=true;
                           break; // Found it, proceed to next question  

                        }
   }
 if (!radioSelected) // no option selected
                {       // warn user, focus question //alert("You did not answer question");

                        RVPollOptions.style.visibility = "visible"; 
                         return false;
                }       
        }
</script>

<asp:RequiredFieldValidator ID="RVPollOptions" runat="server" ControlToValidate="rblPollOptions"
            ErrorMessage="Select option!"> </asp:RequiredFieldValidator>  
<asp:Button ID="btnPoll" Text="Vote" OnClientClick="javascript:return ValidateRadio(this)" runat="server"  OnClick="btnPoll_Click" />
{ var radioOptions=document.getElementById(button.id.split(“”)[0]+“rblPollOptions”); var RVPollOptions=document.getElementById(button.id.split(“”)[0]+“RVPollOptions”); var options=radioOptions.getElementsByTagName(“输入”); var=false; 对于(j=0;j
功能验证程序(按钮)
{  
var radioOptions=document.getElementById(button.id.split(“”)[0]+“rblPollOptions”);
var RVPollOptions=document.getElementById(button.id.split(“”)[0]+“RVPollOptions”);
var options=radioOptions.getElementsByTagName(“输入”);
var=false;
对于(j=0;j
如果您没有在usercontrol中设置RequiredFieldValidator的ValidationGroup属性,则无论是哪个按钮导致回发,只要提交表单,字段验证都将触发

如果您希望将特定的验证器与特定的提交按钮相关联,则必须将它们与同一ValdiationGroup相关联

如果在用户控件内设置ValidationGroup,但发现正在为控件的所有实例触发验证,则需要获取用户控件实例的某些属性并将其合并到ValidationGroup中,以确保为控件上的任何提交按钮专门验证用户控件

以下是一个例子:

<asp:TextBox ID="txtTest" runat="server"/>
<asp:RequiredFieldValidator ID="txtTestReqVal"
     runat="server"
     Display="Dynamic"
     ControlToValidate="txtTest"
     Text="* Field is required"
     ValidationGroup="valGroup<%= ClientId %>"
     CssClass="modelError"
     />
<asp:Button ID="btnSubmit" runat="server" 
     Text="Submit" 
     CausesValidation="true" 
     ValidationGroup="valGroup<%= ClientId %>" 
     />


这里的诀窍就是这一部分。这将向验证组值中注入实例客户端唯一id。这意味着这些控件的所有验证将按用户控件的单个唯一实例分组在一起。通过这种方式,您可以在同一页面上显示同一用户控件的多个实例,但所有实例都经过唯一验证。

如果您没有在usercontrol中设置RequiredFieldValidator的ValidationGroup属性,则无论是哪个按钮导致回发,只要提交表单,就会触发字段验证

如果您希望将特定的验证器与特定的提交按钮相关联,则必须将它们与同一ValdiationGroup相关联

如果在用户控件内设置ValidationGroup,但发现正在为控件的所有实例触发验证,则需要获取用户控件实例的某些属性并将其合并到ValidationGroup中,以确保为控件上的任何提交按钮专门验证用户控件

以下是一个例子:

<asp:TextBox ID="txtTest" runat="server"/>
<asp:RequiredFieldValidator ID="txtTestReqVal"
     runat="server"
     Display="Dynamic"
     ControlToValidate="txtTest"
     Text="* Field is required"
     ValidationGroup="valGroup<%= ClientId %>"
     CssClass="modelError"
     />
<asp:Button ID="btnSubmit" runat="server" 
     Text="Submit" 
     CausesValidation="true" 
     ValidationGroup="valGroup<%= ClientId %>" 
     />


这里的诀窍就是这一部分。这将向验证组值中注入实例客户端唯一id。这意味着这些控件的所有验证将按用户控件的单个唯一实例分组在一起。通过这种方式,您可以在同一页面上显示同一用户控件的多个实例,但所有实例都经过唯一验证。

使您的验证组运行在=“server”

然后给每个人一个唯一的验证组,如下所示:

string validationGroup = Guid.NewGuid().ToString();
txtContactNameValidator.ValidationGroup = validationGroup;
txtContactNumberValidator.ValidationGroup = validationGroup;
btnSave.ValidationGroup = validationGroup;
这将使用户控件彼此隔离,无需垫