通过Javascript禁用转发器内的特定验证器

时间:2013-11-13 06:40:19

标签: c# javascript jquery asp.net validation

我在转发器中有一些字段,我需要验证它们。

以下是该方案: 当页面加载时,我只获得一组字段(名字,姓氏等),我得到一个链接“添加另一个用户”,如果单击该链接,它会在底部再次添加相同的字段。

现在代码部分: 在我的情况下,我需要运行转发器4次(所以字段在页面上从开始4次)。然后我隐藏它们,因为我隐藏了包含它们的<div>。单击按钮时,我会显示第一个隐藏的div,依此类推。

有些代码(不是全部):

 <asp:Repeater ID="rptOtherPeople" runat="server">
 <HeaderTemplate>
      <table>
           <thead>
                <tr>
                     <td>
                          <h3>Други лица</h3>
                     </td>
                </tr>
           </thead>
           <tbody class="GridBody"> 
 </HeaderTemplate>
 <ItemTemplate>
      <tr class="GridRow" id="personRow" style="display: none">
           <td>
                <asp:TextBox ID="txtFirstName" CssClass="mid-inp" Text="" runat="server"></asp:TextBox>
           </td>
      </tr>
 </ItemTemplate>
 <FooterTemplate>
    </tbody>
    </table>
 </FooterTemplate>
 </asp:Repeater>

这是显示下一行的javascript:

$(document).ready(function () {
        var peopleNum = 1;

        if ($(".GridBody tr").length > 0) {
            var tr = $(".GridBody tr")[0];
            tr.style.display = 'table-row';
            tr.setAttribute('hidden', 'false');
            var anc = tr.getElementsByTagName('a');
        }

        if ($(".GridBody tr").length > 0 && peopleNum > 0) {
            for (i = 0; i < peopleNum; i++) {
                var tr = $(".GridBody tr")[i];
                tr.style.display = 'table-row';
                tr.setAttribute('hidden', 'false');
                if (i > 0) {
                    var anc = tr.getElementsByTagName('a');
                    if (anc[i] != undefined)
                        anc[i].style.display = 'none';
                }
            }
        }
    })

    function addPerson() {
        var body = $(".GridBody");
        var indexOfNextRow = $('tr[class="GridRow"][hidden="false"]').length;
        var tr = $(".GridBody tr")[indexOfNextRow];
        tr.style.display = 'table-row';
        tr.setAttribute('hidden', 'false');
    }

问题:例如,我希望该字段是必需的。我放了一个RequiredFieldValidator,我在某些情况下禁用它,并在其他情况下启用它。问题是我在页面上得到4个RequiredFieldValidators,我只能一次打开或关闭所有这些。我想激活其中一个。我找不到办法,因为它们几乎相同。有什么想法吗?

我认为我无法在后面的代码中对此进行排序。我可以通过javascript只使用一个RequiredFieldValidator(我如何识别我想要的那个)。 有些人更喜欢jquery验证。它是否适用于这种情况以及如何(我之前从未使用过jquery验证)?

编辑1

好的控件不一样。在浏览器中,生成的ID为:ctl00_SPWebPartManager1_g_f6926ea5_98ba_46c1_b157_4f1ddc46885d_ctl00_Step21_otherPeople_rptOtherPeople_ctl01_rv1,但我无法从我的Javascript中访问验证器

2 个答案:

答案 0 :(得分:0)

你可以在服务器端或客户端禁用验证器。如果我理解你的问题,你要找的是禁用特定的vaidator说必需的字段验证器。这是一个简单的javascript代码来禁用验证器。< / p>

    function DisableRFValidators() {
        var ValidatorToDisable = document.getElementById("RequiredFieldValidator2");
        ValidatorEnable(ValidatorToDisable, false);
    }

答案 1 :(得分:0)

修正了它!以下是代码:

    $("#aspnetForm").validate();

    $(".required").each(function (index) {
        if ($(this).attr("id").indexOf("txtFirstName") >= 0) {
            $(this).rules("add", {
                required: true,
                minlength: 3,
                messages: {
                    required: "<div class='val' style='color:red'>Name is Required!</div>",
                    minlength: "<div class='val' style='color:red'>Minimum number of symbols = 3!</div>"
                }
            });
        }
        else if ($(this).attr("id").indexOf("txtFirstName") >= 0){
            $(this).rules("add", {
                required: false
            });
        }
    });

function validateData() {
    var result = $("#aspnetForm").valid();
    return result;
}

function btnNextClick(btn_this) {
    var btnNext = document.getElementById("<%=btnMoveNextHidden.ClientID%>");
    if (btnNext != null && validateData() == true) {
        btnNext.click();
    }
}