动态jQuery'使用C#向asp:Repeater添加一个文本框'

时间:2014-01-28 15:52:17

标签: c# javascript jquery html asp.net

我遇到了一大堆代码问题,这些代码意味着将文本框添加到ASP中的Repeater。

我有以下内容:

 <asp:Repeater ID="uxRolesList" runat="server">
          <ItemTemplate>
               <div id="<%# GetRolesDivId() %>" class="div_row">
                    <asp:TextBox ID="uxTxtBoxRole" runat="server" rows="5" columns="100" Text='<%# DataBinder.Eval(Container.DataItem, "RequirementDescription") %>' TextMode="multiline" MaxLength="2000"></asp:TextBox>
                    <input type="button" style="vertical-align:top;" value="X" class="remove-roles-btn" />                           
                    <br /><br />
               </div>
        </ItemTemplate>
 </asp:Repeater>

在html中生成一堆文本框:

<td id="rolesColumn">                
    <div id="roles-0" class="div_row">
         <textarea name="ctl00$mainContent$uxRolesList$ctl00$uxTxtBoxRole" rows="5" cols="100" id="ctl00_mainContent_uxRolesList_ctl00_uxTxtBoxRole">Cool Job1</textarea>
        <input type="button" style="vertical-align:top;" value="X" class="remove-roles-btn" />                           
        <br /><br />
     </div>                    
 </td>

我还添加了以下按钮,该按钮应在点击时将文本框添加到此列表中:

 <asp:Button CssClass="btn" ID="uxAddRoleBtn" runat="server" Text="Add a new role requirement" />

使用以下jQuery代码:

$("#ctl00_mainContent_uxAddRoleBtn").live("click", (function (e) {
        var rolesCounter = $('#ctl00_mainContent_uxTxtBoxRolesCount').val();

        if (rolesCounter < 10) {
            var rolesCounterText = "0" + rolesCounter;
        } else {
            var rolesCounterText = rolesCounter;
        }                     

        $('#rolesColumn').append("<div id='roles-" + rolesCounter + "' class='div_row'><textarea name='ctl00$mainContent$uxRolesList$ctl" + rolesCounterText + "$uxTxtBoxRole' rows='5' cols='100' id='ctl00_mainContent_uxRolesList_ctl" + rolesCounterText + "_uxTxtBoxRole' MaxLength='2000' ></textarea><input type='submit' name='ctl00$mainContent$uxRolesList$ctl" + rolesCounterText + "$uxRemoveRoleBtn' value='X' id='ctl00_mainContent_uxRolesList_ctl" + rolesCounterText + "_uxRemoveRoleBtn' class='remove-roles-btn' style='vertical-align:top;' /><br /><span id='ctl00_mainContent_uxRolesList_ctl" + rolesCounterText + "_uxValTxtBoxRole' style='color:Red;visibility:hidden;'>Please complete this role requirement</span><br /><br /></div>");
        e.preventDefault();
        rolesCounter++;
        $('#ctl00_mainContent_uxTxtBoxRolesCount').val(rolesCounter);
    }));

到目前为止一切顺利。我点击添加按钮,文本框出现,我输入内容,一切都很棒。 html看起来像这样:

<div id="roles-0" class="div_row">
  <textarea id="ctl00_mainContent_uxRolesList_ctl00_uxTxtBoxRole" cols="100" rows="5" name="ctl00$mainContent$uxRolesList$ctl00$uxTxtBoxRole">Cool Job1</textarea><input class="remove-roles-btn" type="button" value="X" style="vertical-align:top;"><br><br>
</div>
<div id="roles-1" class="div_row">
  <textarea id="ctl00_mainContent_uxRolesList_ctl01_uxTxtBoxRole" maxlength="2000" cols="100" rows="5" name="ctl00$mainContent$uxRolesList$ctl01$uxTxtBoxRole">Test</textarea><input class="remove-roles-btn" type="submit" style="vertical-align:top;" value="X" name="ctl00$mainContent$uxRolesList$ctl01$uxRemoveRoleBtn"><br><br>
</div>

然后我点击提交,新值不会通过。

在C#方面,我试图使用以下方式访问数据:

foreach (RepeaterItem item in dl.Items)
    {
        System.Web.UI.WebControls.TextBox rb = item.FindControl(control) as System.Web.UI.WebControls.TextBox;

        if (rb.Text.Trim() != "")
        {
            PositionRequirement pr = new PositionRequirement();
            pr.RequirementDescription = rb.Text;
            pr.RequirementLevel = new PositionRequirementLevel(level, levelDescription);
            pr.OrderNumber = i;
            i++;
            positionRequirements.Add(pr);
        }
    }

其中dl = uxRolesList control = uxTxtBoxRole

我完全不知道为什么uxRolesList Repeater没有使用新值。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

据我所知,所使用的方法不会显示在Repeater数据源中添加的项目,除非它们在向用户提供页面之前存在,因此在示例中,只有绑定的项目在离开服务器(如果有的话)之前到转发器会显示。

如果您不想离开页面并在每次添加点击时访问服务器,我会建议您使用名称而不是ID通过请求对象访问它们(请求[“”]并保持每个文本框的名称相似(“txtbox1”,“txtbox2”)并按照您在Jquery代码中的方式附加计数,然后在提交页面时在服务器上附加使用您存储在uxTxtBoxRolesCount中的计数器。