ScriptManager.RegisterStartupScript在foreach循环中仅被调用一次

时间:2018-12-18 18:58:32

标签: javascript c# asp.net webforms

我有一个数据表,其中包含我从数据库中获得的记录。当页面加载时,我想遍历每条记录并将值提交给JavaScript函数,该函数会将它们显示在页面上,但是它仅适用于表中的第一条记录。如果有人能解决此问题或有更好的方法来完成我打算做的事情,将不胜感激。

我的代码后面:

foreach(DataRow row in tlds.Rows) {
    TLDid = Convert.ToInt32(row["tldID"]);
    tldName = row["tldName"].ToString();
    date = row["releaseDate"].ToString();
    price = Convert.ToDouble(row["price"]);
    tags = row["tags"].ToString();
    ScriptManager.RegisterStartupScript(this, this.GetType(), "tld", "addTLD('" + TLDid + "','" + tldName + "','" + date + "','" + price + "')", true);
} 

我的js函数:

function addTLD(tldID, tldName, releaseDate, price) {
    $('<tr><td>' + tldName + '</td><td>' + releaseDate + '</td><td>' + price + '</tr>').insertAfter('tr');
}

1 个答案:

答案 0 :(得分:0)

您可以使用ASP.NET服务器端表控件,然后动态添加行,并为每行添加所需的单元格,例如下面的代码

ASPX

<asp:Table ID="myTable" runat="server" Width="100%"> 
</asp:Table>

ASPX.CS

    foreach (DataRow row in tlds.Rows)
                {
                    date = row["releaseDate"].ToString();
                    price = Convert.ToDouble(row["price"]);
                    tags = row["tags"].ToString();

                     TableRow row = new TableRow();

                     TableCell TLIdCell= new TableCell();
                     TLIdCell.Text = Convert.ToInt32(row["tldID"]);
                     row.Cells.Add(TLIdCell);

                      TableCell tldNameCell = new TableCell();
                      tldNameCell .Text = Convert.ToString(row["tldName"]);
                      row.Cells.Add(tldNameCell);

                     //Similarly add code for date, price and tags cells

                      // Finally add row to table rows collection
                      myTable.Rows.Add(row);
                }