通过web控件循环出现问题
本文关键字:问题 循环 web 控件 通过 | 更新日期: 2023-09-27 18:05:53
我有一个网页,我在Page_Load
事件期间动态创建控件(这是这样做的,因为我不知道我需要多少控件,直到会话是活跃的,某些变量是可访问的)
我需要能够循环通过这些控件查找复选框时,一个按钮单击处理。循环遍历表单。控制措施似乎还不够。我认为Request.Form
可能会工作,但它似乎不能在我的c#块访问?
Request.Form
的代码应该是什么样子?或者
有没有人这样做与动态创建控件之前?
来自MSDN的简化示例:
var myControl = FindControl("NameOfControl");
if(myControl != null)
{
//do something
}
else
{
//control not found
}
希望这对你有帮助!div;)
您的控件将可以通过其直接父控件的Controls
集合访问。除非你像Page.Form.Controls.Add (myControl);
一样添加它们,否则你不会在Page.Form.Conttrols
中找到它。如果您将它们添加到占位符中,则必须在thePlaceHolder.Controls
中找到它们。
LinkButton myDynamicLinkButton = new myDynamicLinkButton ();
myDynamicLinkButton.ID = "lnkButton";
myPlaceHolder.Controls.Add (myDynamicLinkButton);
//........
LinkButton otherReferenceToMyLinkButton = myPlaceHolder.FindControl ("lnkButton");
正如@David在他的评论中所说,你可能应该考虑使用中继器。这可能会大大简化您的情况。
由于控件可能嵌套在其他控件中,因此需要递归搜索。您可以使用此方法查找控件:
public Control FindControlRecursive(Control root, string id)
{
if (root.ID == id)
{
return root;
}
foreach (Control c in root.Controls)
{
Control t = FindControlRecursive(c, id);
if (t != null)
{
return t;
}
}
return null;
}
你可以这样实现它:
CheckBox check = FindControlRecursive(Page.Form, "CheckBox1");
您应该可以访问aspx.cs代码中的任何地方的Request["xyz"]
。您可以像上面描述的那样找到控件并读取它的值,或者使用Control.UniqueID
属性直接从Request中读取。例如,如果它是中继器中的一个复选框那么UniqueID
将会是dtgData$ctl02$txtAmount
感谢大家的真知灼见。我参加了讨论,并继续进行下去,找到了最适合我的解决方案。
foreach(String chk in Request.Form)
{
if (chk.Contains("chkRemove"))
{
int idxFormat = chk.LastIndexOf("chkRemove");
objectname = chk.Substring(idxFormat);
}
}
结果我需要的只是名字。字符串的末尾包含一个数字,用于确定数据项的位置。谢谢你的建议!