【问题标题】:Finding dynamically added server control and use it's HTML查找动态添加的服务器控件并使用它的 HTML
【发布时间】:2012-11-27 06:37:12
【问题描述】:

我正在尝试从动态创建的服务器文本框中获取文本。 我只是通过将文本放入我放置在 aspx 文件中的另一个文本框中进行检查,但我得到的始终是一个空字符串。 (我也试过另一种方法,附在remark里,也不管用)

下面是代码:

public partial class Product_list : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        create_table();
    }

    protected void create_table()
    {
        DBServices db1=new DBServices();
        List<Product> list1 = db1.ReadProducts();
        int id_number=1;
        int id_numer2 = 7;
        int id_number3 = 13;

        Table tbl = new Table();
        tbl.ID = "tbl1";
        this.Controls.Add(tbl);

        foreach (Product p1 in list1)
        {
            TableRow rw = new TableRow();
            rw.ID = Convert.ToString(id_numer2);

            TableCell cell1 = new TableCell();
            cell1.Text = p1.Name;

            TableCell cell2 = new TableCell();

            Image img = new Image();
            img.ImageUrl = p1.ImagePath;
            img.Height = 50;
            img.Width = 50;

            cell2.Controls.Add(img);

            TableCell cell3 = new TableCell();
            cell3.ID = Convert.ToString(id_number3);

            TextBox textbox1 = new TextBox();
            textbox1.ID = Convert.ToString(id_number);

            cell3.Controls.Add(textbox1);

            rw.Controls.Add(cell1);
            rw.Controls.Add(cell2);
            rw.Controls.Add(cell3);

            tbl.Controls.Add(rw);

            id_number++;
            id_numer2++;
            id_number3++;
        } 
    }

    void save_list()
    {
        List<Product> Items_list = new List<Product>();

        //TextBox aControl =Page.FindControl("1") as TextBox;

        /var tbl1 = this.Page.FindControl("tbl1") as Table;
        var tr = tbl1.FindControl("7") as TableRow;
        var td = tr.FindControl("13") as TableCell;
        var txt = td.FindControl("1") as TextBox;

        txt1.Value = txt.Text;

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        save_list();
    }
}

这是aspx代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Product_list.aspx.cs" Inherits="Product_list" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script runat=server>
        public override void VerifyRenderingInServerForm(Control control)
        {
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div id="header">
            <h1>Items List</h1>
        </div>

        <div id="prod_table" runat="server"></div>
        <div>
            <input type="text" runat="server" id="txt1" />
            <asp:Button ID="Button1" runat="server" Text="Button"
                onclick="Button1_Click" />
        </div>
    </form>
</body>
</html>

【问题讨论】:

  • 你刚刚创建了文本框,你没有为它的 Text 属性设置任何值,这就是你得到一个空字符串的原因。
  • 我为文本框输入值,然后单击按钮,它应该会得到我输入的文本
  • @apros 给了你正确的解释,但是如果页面发布到服务器后你不需要数据,那么你可以只获取文本框的值客户端。因此,您应该根据接下来需要对数据执行的操作来更改代码。

标签: c# asp.net dynamic controls


【解决方案1】:

您应该了解,您会在每次发布到服务器时重新创建表。因此,您不能依赖动态表中的数据,因为每次发布后它都会丢失。我的建议是将此值保留在具有“隐藏”类型的永久输入控件中。然后在按钮单击事件中获取此值并将其分配给文本框。

【讨论】:

  • 我明白了。这是个好主意!以及如何将事件 onchange 添加到文本框并将字符串存储在变量中?它会起作用吗? : ]
  • 在我看来没有。只有一个变量值将仅在向服务器发布的一个帖子期间存在。因此,作为一种变体,您应该查看其他服务器端或客户端存储交叉发布数据(如 cookie、查询字符串、ViewState、会话、缓存等)的机会。
猜你喜欢
  • 2012-07-27
  • 1970-01-01
  • 2016-07-29
  • 2011-02-08
  • 2011-10-09
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 2014-07-15
相关资源
最近更新 更多