0

我在 ASP.NET 中有一些动态控件。我需要从不再存在的控件中检索回发值。

以下代码完美运行:

value = Request.Form["ctl00$ContentPlaceHolder1$text_name"];

但是,我想知道是否有一种优雅的方式来动态生成"ctl00$ContentPlaceHolder$"部件或获取textbox_value.UniqueID控件何时不再存在的值。

抱歉,如果这个问题以前出现过一百万次 - 只是寻找一个更优雅的解决方案,不涉及更改服务器上的任何设置。

编辑:

根据要求,添加控件的代码如下:

foreach (NameValuePair entry in database_table){

    Label label = new Label();
    label.ID = "label_" + entry.Name;
    label.Value = entry.Name;
    label.Attributes.Add("runat", "server");

    TextBox textBox = new TextBox();
    textBox.ID = "text_" + entry.Name;
    textBox.Text = entry.Value;
    textBox.Attributes.Add("runat", "server");
}

单击按钮时,它从数据库表中读取名称-值对(条目的数量不是静态的),允许修改它们并在按下“保存”按钮时保存它们。它的功能类似于弹出窗口,因此这些字段在回发时消失了。(我不希望更改这部分代码)

谢谢~

4

2 回答 2

2

我最终编写了自己的函数来解析Request.Form数据。它搜索命名的控件attname并返回该控件的值。

private string findControlValue(string attname)
{
    string[] request = Request.Form.ToString().Split('&');
    string searchkey = "txt_" + attname;

    foreach (string seg in request)
    {
        if (seg.Contains(searchkey))
        {
            string ctrlName = seg.Split('=')[0];
            string ctrlValue = seg.Split('=')[1];
            string value = Server.UrlDecode(ctrlValue);
            return value;
        }
    }
    return null;
}
于 2013-08-22T14:47:44.427 回答
1

If you are using ASP.net 4.0 or later, you can set the ClientIdMode of the control to be static, and then the ID that you use for the control will be the one that is used client-side (though this wont work for controls that are in repeater-like controls - a static ID has to be unique to the page). If you can do this, then it will allow you to set "friendlier" ID values for the controls (which will be more predictable for your data retrieval as shown in your question).

于 2013-08-21T14:40:54.940 回答