【问题标题】:Disabling RequiredFieldValidator for hidden fields为隐藏字段禁用RequiredFieldValidator
【发布时间】:2015-11-11 05:55:03
【问题描述】:

我有一个在不隐藏时应该是强制性的下拉列表,所以我有一个RequiredFieldValidator。

<table runat="server" id="tblLocations" class="ts1">
    <tr>
        <td class="tr0">
            Location:
        </td>
        <td>
            <asp:DropDownList ID="ddlLocations" runat="server">
            </asp:DropDownList>
            <asp:RequiredFieldValidator ID="rfvDdlLocations" runat="server" ControlToValidate="ddlLocations" InitialValue="0" validationgroup="LocationValidation"  ErrorMessage="Please select a Location" />
        </td>
    </tr>
</table>

选择单选按钮时,我将此表的可见性设置为false。

我想在不可见时禁用此字段的验证,所以我在单选按钮更改事件上设置了这个:

rfvDdlLocations.Enabled = tblLocations.Visible;

但是,这不会禁用验证。

我已尝试按照其他地方的建议使用 JQuery,但这也没有效果:

<script type="text/javascript">
$("[id$='btnDelegate']").click(function () {
    if (!$("[id$='tblLocations']").is(':visible')) {
        ValidatorEnable($("[id$='rfvDdlLocations']")[0], false);
    }
    //ValidationSummaryOnSubmit("LoginUserValidationGroup");
    if (Page_ClientValidate("LocationValidation")) {
        alert('it is valid');
        return true;
    }
    else {
        alert('Not valid');
        return false;
    }
});

【问题讨论】:

  • 当我们可以简单地使用 $("#btnDelegate") 时,是否有任何理由使用 $("[id$='btnDelegate']") 选择元素?还可以通过将 if (!$("[id$='tblLocations']").is(':visible')) 替换为 if (!$("[id$='tblLocations']").is( '可见的'))。注意可见之前没有“:”
  • @user2181397 感谢您的建议,但它们不会改变代码行为

标签: javascript jquery asp.net validation


【解决方案1】:

在这种情况下,您应该使用自定义验证器,如下所示

<asp:CustomValidator ID="cvDdlLocations" runat="server" ControlToValidate="ddlLocations" ValidationGroup="LocationValidation"  ErrorMessage="Please select a Location" OnServerValidate="cvDdlLocations_ServerValidate" ClientValidationFunction="validateLocation" />

用于客户端验证

function validateLocation(s, args) {
    if($('#'<%= Radio.ClientID %>).is(':checked')){
        args.IsValid = true;
    }
    else {
        args.IsValid = $('#<%= ddlLocations.ClientID%>').val() != "0";
    }
}

用于服务器验证

protected void cvPrice2Edit_ServerValidate(object source, ServerValidateEventArgs args)
{
    args.IsValid = true;
    if(!Radio.Checked) {
        args.IsValid = ddlLocations.SelectedValue != "0";
    }
}

希望对你有帮助

【讨论】:

  • 感谢您的回答
猜你喜欢
  • 2012-07-05
  • 2011-07-13
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 2013-10-03
  • 2013-09-03
  • 2019-01-29
  • 2023-03-08
相关资源
最近更新 更多