【问题标题】:How to get data from table which add row at client side?如何从在客户端添加行的表中获取数据?
【发布时间】:2013-10-05 18:07:39
【问题描述】:

我有一个包含 2 列的表格。 并有一个“添加行”按钮,允许用户动态添加带有 2 个文本框的新行(通过使用 jJvascript 来提高性能而无需回发到服务器)。

我希望检索用户键入的所有值并保存到数据库。

我的问题是,我无法在服务器端(在 .aspx.cs 文件中)检索表的值,因为我的表不是 runat="server",如果我的表 runat="server",我无法在客户端添加行一边。

有解决此问题的想法或有其他替代方法吗?

以下是我的“添加行”代码:

function addRow(tableID) {

        var table = document.getElementById(tableID);

        var rowCount = table.rows.length;
        var row = table.insertRow(rowCount);

        if (rowCount > 10) {
            alert("Only 10 rows allow");
            return false;
        }  

        var cell1 = row.insertCell(0);
        cell1.innerHTML = rowCount;

        var cell2 = row.insertCell(1);
        var element1 = document.createElement("input");
        element1.type = "text";
        element1.name = "txtbox[]";
        element1.style = "width:345px;"
        cell2.appendChild(element1);

        var cell3 = row.insertCell(2);
        var element2 = document.createElement("input");
        element2.type = "text";
        element2.name = "txtbox[]";
        element2.style = "width:345px;"
        cell3.appendChild(element2);
    }

这是表格的代码

<table id="tblAddNode" width="750px" border="1">
            <tr>
                <th width="10px">No.</th>
                <th width="350px">Description</th>
                <th width="350px"> Keyword </th>
             </tr>
             <tr>
                <td width="10px">1</td>
                <td width="350px"> <input type="text" style="width:345px;"/> </td>
                <td width="350px"> <input type="text" style="width:345px;"/> </td>
             </tr>
        </table>

已编辑 添加行按钮

input type="button" value="Add Row" onclientclick="addRow('tblAddNode')"

提交按钮

<asp:Button ID="EnterRootNodeButton" runat="server" Text="OK" OnClick="EnterRootNode_Click"/>

【问题讨论】:

  • 无论您使用 ASP.Net Forms 想出什么解决方案都不会很漂亮。您应该使用 javascript 框架使用 AJAX 方法。
  • 有提交按钮吗?或者您希望单击添加按钮将数据发送到服务器?
  • @Dvir.. yaya 还有另一个提交发送数据到服务器。
  • @SpencerRuport.. 好的.. 我会尝试这样做.. 谢谢..

标签: javascript c# asp.net html-table


【解决方案1】:

如果您将其标记为 runat="server",我不确定您为什么认为无法在客户端操作信息,您的意思是在此之后更改了 Id 吗?

您可以通过添加 ClientIDMode="Static" 或在您的 javascript 中将 id 标记为静态,而不是引用 Id,而是引用 ClientId

此外,有多种方法可以做到这一点,这取决于您的解决方案是如何设计的以及您希望在该问题上花费的时间。

您可以使用用户输入信息发出 ajax 调用,然后将其发布到 API(您需要开发该 API)。您将保存用户添加的所有信息。

您还可以使用另一个 API 来公开所有信息,并使您能够重新加载信息(如果将来需要)。

这样做你会有更好的 UI 体验,但是如果你不熟悉 Ajax 和 web 服务设计,当然需要更多的时间。

【讨论】:

  • 您好,感谢您的回复。如果我把 runat="server",我不能使用 javascript 添加行..
  • 我不知道你为什么这么说,在你的按钮中,你可以有 OnClick="something" 或 OnClientClick="something" 你可以在那里拥有你的功能
  • 我在我的问题中新增了两个按钮。在 aspx.cs 文件中,在 EnterRootNode_Click 操作那里.. 没有 runat="server",我尝试使用 tblAddNode.Rows.Count 检索行数,但是有一个错误说当前不存在 tblAddNode上下文。
  • 如果您需要访问 tblAddNode,则需要在后面的代码中将表标记为 Runat='server',否则您无法访问它。您最好坚持使用完整的客户端实现或在您的情况下完整的服务器端实现。如果您想混合使用,请将其标记为 runat='server' 并设置 ClientIDMode='static' 以便您的客户端代码不会中断
  • 是这样放的吗?
猜你喜欢
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2021-12-28
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
相关资源
最近更新 更多