用c#取一个table单元格的值

Take a value of cell of a table with c#

我在 .aspx 页面中有这段代码

foreach (Orders p in lst)
{
    Response.Write(string.Format("<tr><td>{0}</td><td>{1}</td><td>{2}</td>", p.Prezzo, p.Dettaglio, p.Voto ));
    Response.Write(string.Format("   <td class=\"text-center\">   <asp:LinkButton  class=\"btn btn-danger btn-xs\"  ID=\"btnEliminaOrdine\" OnClick=\"javascript:__doPostBack('btnEliminaOrdine_Click','')\" runat=\"server\">Delete</asp:LinkButton></td> </tr>"));
}

我只写了一些代码,因为其余的并不重要。

这是服务器 ajax 页面。实际上,此页面会创建一个 table,并在另一个页面内进行分页。因此,当我单击 "btnEliminaOrdine" 按钮时,我需要将此页面的 "p.Id" 的值带到另一个页面的代码隐藏中。

如何在主页上呈现这些控件?

Response.Write 将页面正文中的所有内容都写为纯字符串。所以这行不通。 ASP.NET 应该知道任何动态添加到页面的控件。您可以按照以下方式绑定 table 和控件 -

页面加载 - 创建 System.Web.UI.HtmlControls.HtmlTable 控件并动态绑定它。

        HtmlTable table = new HtmlTable();

        foreach (Orders p in lst)
        {
            var row = new HtmlTableRow();

            var td = new HtmlTableCell();
            td.InnerHtml = p.Prezzo;
            row.Cells.Add(td);

            td = new HtmlTableCell();
            td.InnerHtml = p.Dettaglio;
            row.Cells.Add(td);

            td = new HtmlTableCell();
            td.InnerHtml = p.Voto;
            row.Cells.Add(td);

            td = new HtmlTableCell();
            LinkButton btnEliminaOrdine = new LinkButton();
            btnEliminaOrdine.ID = "btnEliminaOrdine"+p.Id;
            btnEliminaOrdine.CssClass = "btn btn-danger btn-xs";
            btnEliminaOrdine.Text = "Delete";
            btnEliminaOrdine.Click += new System.EventHandler(this.btnEliminaOrdine_Click);
            td.Controls.Add(btnEliminaOrdine);
            row.Cells.Add(td);
            table.Rows.Add(row);
        }

循环后将 table 控件绑定到页面的表单中。

form1.Controls.Add(table);

创建一个事件处理程序方法,该方法将在单击按钮 ELiminaOrdine 时触发

protected void btnEliminaOrdine_Click(object sender, EventArgs e)
{
    LinkButton btn = (LinkButton)sender;
    Response.Write(btn.ID);
}

这种方式应该可行。已测试。

更新

如果您想要 ajax 解决方案,您的 Response.Write 就可以了。只需使用 asp link 按钮即可。

相反 -

Response.Write(string.Format("   <td class=\"text-center\">   <asp:LinkButton  class=\"btn btn-danger btn-xs\"  ID=\"btnEliminaOrdine\" OnClick=\"javascript:__doPostBack('btnEliminaOrdine_Click','')\" runat=\"server\">Delete</asp:LinkButton></td> </tr>"));

使用 -

Response.Write(string.Format("   <td class=\"text-center\">   <a class=\"btn btn-danger btn-xs\"  id=\"btnEliminaOrdine\" onclick=\"deleteOrdine({0},{1},'{2}');\">Delete</a></td> </tr>", p.Id,page,key));

在名为 "deleteOrdine" 的 RistoratoreAccount.aspx 页面中使用 javascript 方法。这将 post 向 ServerListaOrdini.aspx.cs 发出删除请求。

function deleteOrdine(OrdiniId, Page, Key) {

        $.ajax({
            type: 'post',
            url: 'ServerListaOrdini.aspx/DeleteOrdini',
            data: {
                ordiniId: OrdiniId,
                page: Page,
                key: Key
            },
            success: function (response) {
                $("#table_ordini").html(response);
            }
        });

        return false;
    }

ServerListaOrdini.aspx.cs 将按 id 删除订单,删除 Ordine 后 returns 再次返回 table

public void DeleteOrdini(int ordiniId)
    {
        Orders o = OrdersDB.SelectById(ordiniId);
        bool check = OrdersDB.Delete(o);
    }