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

Posted

技术标签:

【中文标题】从动态 htmlTable 获取 vb.net 中的数据【英文标题】:Getting Data in vb.net from dynamic htmlTable 【发布时间】:2014-11-19 01:35:20 【问题描述】:

我有一个在服务器级别运行的 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

【问题讨论】:

您有没有机会看到我的回复,我认为您需要采用一些隐藏字段的方法,因为您无法更新视图状态,因此无法在后面的代码中使用它。 为什么不使用 Knockout.js 和 WebApi 创建和进行 CRUD 操作? 【参考方案1】:

在 JS 中创建的动态行在回发后将在服务器上不可用,因为它不在视图状态中 要解决此问题,您可以执行以下操作

您可以将隐藏的输入字段添加到页面中,例如

<input type="hidden" id="hiddenTableData" name="hiddenTableData" value="" />

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

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

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

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

解析隐藏字段值,填充表格并处理它

【讨论】:

【参考方案2】:

如果您使用JavaScript Method 或服务来填充任何控件,那么您将不会在代码页中获取数据。但是您可以将该数组传递给代码页,然后可以轻松获取所需的数据。

为此,您应该创建一个与数组相同的类(在您正在使用的网页中)和一个网络方法 它接受这个(数组)类类型。

【讨论】:

【参考方案3】:

我最终尝试了相同的示例,并遇到了相同的问题,即生成的 TR 无法在后面的代码中访问。这是因为,它们是使用动态 JS 添加的,并且没有放入 VIEWSTATE,就像您现在一样,只有在 VIEWSTATE 中时,ASP 控件值才在 POSTBACK 的代码中可用。在这种情况下它不是,所以调试器说 projGrid.Rows.Count = 0。为了让它工作,你需要把改变的/动态的 JS 添加到 VIEWSTATE 中,但同样是编码格式,我担心,如何这样做。

但是,如果您将任何静态 TR 放入表中,那么肯定是可以访问的,我已经在调试器中验证,如果表中只有一个静态 TR,它会显示 projectGrid.Rows.Count = 1。再次因为,静态 TR 仅在 VIEWSTATE 中。

所以总结一下,在我看来,最好在 JS 端处理,如果你要将这些值保存到 DB 中,然后进行 AJAX 调用并保存,并以 JSON 格式传递数据。或者使用隐藏字段,将这些数据保存为JSON格式,发布后,在后面的代码中获取,读取JSON格式数据,进行操作。

【讨论】:

以上是关于从动态 htmlTable 获取 vb.net 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

vb.net如何动态调用WebService接口啊

从 Isnumeric() VB.NET 获取错误

在 vb.net 中,如何从数据表中获取列名

如何从 VB.NET 的视图中获取 SQL 查询

VB.NET 从 ODBC 获取数据为 JSON

如何从 VB.NET 中的 USB 端口获取数据