从动态htmlTable中获取vb.net数据

4
我有一个在服务器级别上运行的HTML表格。然而,我无法访问它所填充的数据。
我正在使用JavaScript填充表格,但需要使用VB.NET访问数据。
我使用jQuery通过使用.html方法将信息传递到页面。
以下是我的JavaScript代码:
function ShowProj(strId, qno,ar) {
        $('#hiddenQno').val(qno);
        $('#qnoLbl').val(qno);
        var output = '';
        output = "<tr><th>Product</th>";
        output += "<th>Bond</th>";
        output += "<th>Cut</th>";
        output += "<th>Pack</th>";
        output += "<th>Delivery date</th></tr>";
        for (i = 0; i < ar.length; i++) {
            output += "<tr>";
            output += "<td style='width: 40%;'>" + ar[i][0] + "</td>";
            output += "<td style='width: 10%; text-align: center;'><input type='checkbox' " + (ar[i][1] == 1 ? 'checked' : '') + " /></td>";
            output += "<td style='width: 10%; text-align: center;'><input type='checkbox' " + (ar[i][2] == 1 ? 'checked' : '') + " /></td>";
            output += "<td style='width: 10%; text-align: center;'><input type='checkbox' " + (ar[i][3] == 1 ? 'checked' : '') + " /></td>";
            output += "<td style='width: 30%;'><input type='text' value='" + ar[i][4] + "'/><input type='hidden' value='" + ar[i][5] + "' /></td>";
            output += "</tr>"
        }
        $('#projGrid').html(output);
    }

我正在使用`ArrayList`从vb.net传递信息。
这是我的HTML,
<div class="modalPopup" id="projPopup" style="width: 40%;">
                <table style="width:100%;">
                    <tr>
                        <td colspan="2">
                            <table id="projGrid" runat="server" style="width: 100%;border: 1px solid black; font-size: 16;">
                            </table>
                        </td>
                    </tr>

                    <tr>
                        <td>
                            &nbsp;</td>
                        <td>
                            &nbsp;</td>
                    </tr>
                    <tr>
                        <td>
                            <asp:Button ID="projOk" runat="server" Text="Update" /></td>
                        <td>
                        <asp:Button ID="projCncl" runat="server" Text="Cancel" />
                        </td>
                    </tr>
                </table>
            </div>

这是我的VB.NET代码。
For Each row As HtmlTableRow In projGrid.Rows
            'Dim chkBond As HtmlInputCheckBox = row.Cells(1).Controls(0)
            Dim str As String
            str = row.Cells(0).InnerText
        Next

你有没有看到我的回复?我认为你需要采用一些隐藏字段的方法,因为你无法更新视图状态,从而使其在代码后台中可用。 - Arindam Nayak
为什么不使用Knockout.js和WebApi创建和执行CRUD操作呢? - andrey.shedko
3个回答

2
在JS中创建的动态行,在postback之后将不会在服务器上可用,因为它不在视图状态中。为了解决这个问题,你可以采取以下措施:
你可以向页面添加隐藏的输入字段,例如:
<input type="hidden" id="hiddenTableData" name="hiddenTableData" value="" />

然后在您的脚本中将需要的数据添加到隐藏输入字段中,

$('#hiddenTableData').val(JSON.stringify(ar));

然后在服务器上的页面回发时,获取表单隐藏字段的值

String tableData= Request.Form["hiddenTableData"];

解析隐藏字段的值,填充您的表格并进行处理。

1
如果您正在使用JavaScript方法或服务来填充任何控件,则无法在代码页中获取数据。但是,您可以将该数组传递到代码页,然后可以轻松地按照您想要的方式获取数据。
为此,您应该创建一个与Web页面中使用的类相同的类和一个Web方法,该方法接受此(数组)类类型。

1
我在我的环境中尝试了同样的示例,并遇到了相同的问题,生成的TR在代码后端不可访问。这是因为它们是使用动态JS添加的,并且这些内容没有放入VIEWSTATE中。如您所知,只有当这些内容在VIEWSTATE中时,ASP控件值才在POSTBACK后在代码后端中可用。在这种情况下,调试器显示projGrid.Rows.Count = 0。要使其正常工作,您需要将更改/动态JS添加的TR放入VIEWSTATE中,但再次强调,这些是编码格式,我担心如何做到这一点。
但是,如果您将任何静态TR放入表格中,那么肯定可以访问这些内容。我已经在调试器中验证过,如果只有一个静态TR,则它会显示projectGrid.Rows.Count = 1。而且,这个静态TR仅在VIEWSTATE中。
因此,总之,我认为最好在JS方面处理。如果您要将这些值保存到数据库中,则进行AJAX调用并保存,并以JSON格式传递数据。或者使用隐藏字段,在JSON格式中保存这些数据,并在提交后,在代码后端获取这些数据,读取JSON格式数据并操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接