我在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");
}
单击按钮,它会从数据库表中读取名称 - 值对(条目数不是静态的),允许修改它们并在按下“保存”按钮时保存它们。它的功能类似于弹出窗口,因此字段在回发时消失了。 (我不想改变代码的这一部分)
感谢〜
答案 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值(对于您的数据检索,这将更加可预测,如您的问题所示)。