ASP.NET验证与用户控件内的验证组无法正常工作

3

我正在使用一个用户控件(用于电话号码),并且在其中有一些验证。该用户控件在系统中的多个位置被使用,我需要从使用它的地方传递ValidationGroup,但是这样并没有起作用(验证未触发),用户可以提交表单而不输入电话号码。

注意:提交按钮已经有相同的验证组。

以下是用户控件的代码

<div runat="server" ID="DivContainer" class="control-group">
<label class="control-label">Phone Number<span class="required">*</span></label>
<div class="row-fluid">
    <div class="span6">
        <asp:DropDownList runat="server" ID="DdlCountryPhoneCodes" CssClass="span12" />
    </div>
    <div class="span6">
        <input type="text" maxlength="50" cssclass="span12" runat="server" id="TxtPhoneNumber" />
    </div>
</div>
<div class="validation-message-wrapper">
    <asp:RequiredFieldValidator runat="server" CssClass="validation-message" ErrorMessage="Enter your phone number." ValidationGroup="<%= ValidationGroup %>" Display="Dynamic" ControlToValidate="TxtPhoneNumber" />
    <asp:CustomValidator runat="server" ID="CustomValidatorTxtPhoneNumber" ControlToValidate="TxtPhoneNumber" Display="Dynamic" CssClass="validation-message" ValidationGroup="<%= ValidationGroup %>" ClientValidationFunction="validatePhoneNumber" />
</div>

以下是用户控件的使用示例

<uc1:RecoveryPhoneNumber runat="server" ID="ucRecoveryPhoneNumber" ValidationGroup="ManageAccountGroup" />

问:如何使验证功能在使用用户控件的任何地方生效?


你是否尝试在用户控件代码后台的Page_Load事件中设置验证器的ValidationGroup属性呢? - Mohsin Mehmood
不,我是从使用它的地方传递ValidationGroup属性的值(就像我上面写的例子一样)。 - Ⲁⲅⲅⲉⲗⲟⲥ
是的,所以您的用户控件有一个属性 ValidationGroup,您在放置用户控件的页面上设置它。在用户控件内部,您有验证控件,例如 RequiredField 和 CustomValidator。在用户控件的 Page_Load 事件中,您可以将每个验证控件的 ValidationGroup 属性设置为用户控件的 ValidationGroup 属性,例如 CustomValidatorTxtPhoneNumber.ValidationGroup = this.ValidationGroup - Mohsin Mehmood
我不需要这样做;因为我正在用户控件代码中通过此代码(**ValidationGroup="<%= ValidationGroup %>"**)设置值。 - Ⲁⲅⲅⲉⲗⲟⲥ
1
好的。请更新您的问题,说明ValidationGroup已经设置在按钮上了。还有,您是否检查过浏览器控制台是否有任何错误。 - Mohsin Mehmood
显示剩余2条评论
1个回答

1
您需要一个数据绑定表达式。您现在只是将字符串<%= ValidationGroup %>作为验证组名称添加,而不是变量ValidationGroup。这是正确的方式。
ValidationGroup='<%# ValidationGroup %>'

你需要在UserControl的Page_Load中调用DataBind。
protected void Page_Load(object sender, EventArgs e)
{
    DataBind();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接