1

我有用户控件,其中需要进行字段验证。我在单个网页中有 2 个此用户控件的实例。现在,如果我单击第一个用户控件上的按钮,则会为 2 个用户控件触发验证消息。但只有该用户控件的必填字段必须被触发。请任何人都可以解决这个问题。谢谢马达维

4

5 回答 5

3

如果您没有在用户控件中设置RequiredFieldValidator 的ValidationGroup 属性,那么无论哪个按钮导致回发,只要提交表单,就会触发字段验证。

如果您希望将特定验证器与特定提交按钮相关联,那么您必须将它们关联到同一个 ValdiationGroup。

如果您在用户控件中设置 ValidatioGroup 但发现正在为控件的所有实例触发验证,那么您将需要获取用户控件实例的某些属性并将其合并到 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 %>" 
     />

这里的技巧是 <%= ClientId %> 部分。这会将实例客户端唯一 ID 注入验证组值。这意味着这些控件的所有验证都将由用户控件的单个唯一实例组合在一起。这样,您可以在同一页面上显示同一用户控件的多个实例,但所有实例都经过唯一验证。

于 2010-11-12T09:28:11.187 回答
1

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

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

看这里

解决此问题的一种方法是在您的用户控件上公开一个公共属性,您可以将其传入验证组名称。

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

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

于 2010-11-12T06:11:29.263 回答
1

使您的验证组 runat="server"

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

string validationGroup = Guid.NewGuid().ToString();
txtContactNameValidator.ValidationGroup = validationGroup;
txtContactNumberValidator.ValidationGroup = validationGroup;
btnSave.ValidationGroup = validationGroup;

无论页面上有多少个,这都会将用户控件彼此隔离。

于 2011-06-24T16:07:05.657 回答
0
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" />
于 2010-11-12T09:01:36.490 回答
0

我认为验证组将不起作用..因为它是同一个用户控件,但在页面中下降了 2 次。任何按钮都会在两个用户控件上触发验证 wh

于 2010-11-12T06:50:38.463 回答