1

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

这是场景: 当页面加载时,我只得到一组字段(名字,姓氏等),我得到一个链接“添加另一个用户”,如果你点击链接它会再次添加相同的字段底部。

现在是代码部分: 在我的情况下,我需要运行转发器 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 中从这里访问验证器

4

2 回答 2

0

您可以禁用服务器端或客户端的验证器。如果我理解您的问题,您要查找的是禁用特定的验证器说必填字段验证器。为此,这里有一个简单的 JavaScript 代码来禁用验证器。

    function DisableRFValidators() {
        var ValidatorToDisable = document.getElementById("RequiredFieldValidator2");
        ValidatorEnable(ValidatorToDisable, false);
    }
于 2013-11-13T07:20:30.810 回答
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();
    }
}
于 2013-11-14T10:21:46.880 回答