在回发时获取动态控件(唯一ID)

时间:2013-08-21 14:37:23

标签: asp.net

我在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");
}

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

感谢〜

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

如果您使用的是ASP.net 4.0或更高版本,则可以将控件的ClientIdMode设置为静态,然后用于控件的ID将是客户端使用的ID (虽然这不适用于类似转发器的控件中的控件 - 静态ID必须是页面唯一的)。如果您可以这样做,那么它将允许您为控件设置“更友好”的ID值(对于您的数据检索,这将更加可预测,如您的问题所示)。