FindControl和Get下拉列表的选定值
本文关键字:下拉列表 Get FindControl | 更新日期: 2023-09-27 18:12:17
当使用c#代码查找从SQL数据结果动态添加的HTML控件时,会发生这种情况。
使用下面的迭代通过表行和行每个表行,我们写控件的值,在这种情况下是一个HtmlSelect。Html选择元素位于单元格3
for (int i = 1; i <= Table1.Rows.Count - 1; i++)
{
HtmlSelect select = Form.FindControl("MainContent_selectBoxstatus" + i) as HtmlSelect;
System.Diagnostics.Debug.Write(select.Value);
}
导致:
类型为'System '的第一次异常。得到NullReferenceException"发生在project.dll
如果我使用以下命令:
for (int i = 1; i <= Table1.Rows.Count - 1; i++)
System.Diagnostics.Debug.Write(Table1.Rows[i].Cells[0].Text);
我得到了想要的结果,从单元格1的文本。
如何创建选择下拉菜单:
for (int i = 0; i < dr.FieldCount; i++)
HtmlSelect sStatus = new HtmlSelect();
sStatus.Items.Add(new ListItem("Working", "0"));
sStatus.Items.Add(new ListItem("Fault", "1"));
sStatus.SelectedIndex = 0;
sStatus.Attributes.Add("class", "dropdownlist");
sStatus.ID = "selectBoxstatus" + rowindex;
cell.Controls.Add(sStatus);
当您试图"破解"ASP时,通常会发生这种情况。净内部。我的意思是"破解",因为使用魔法字符串来解析分配给子控件的自动生成id是非常不安全的。有更好和更安全的方法来做到这一点。
1-如果你想呈现一个表格布局,我强烈建议使用一个数据绑定控件,如GridView
, ListView
等,你可以交叉它的RowDatabound
事件,并以一种安全的方式检索子控件
2-如果你不能重新编写,那么替换你的代码如下…
for (int i = 0; i < Table1.Rows.Count; i++)
{
HtmlSelect select = Table1.Rows[i].Cells[0].FindControl(string.Format("selectBoxstatus{0}", i)) as HtmlSelect;
if(select != null)
System.Diagnostics.Debug.Write(select.Value);
}
选项2代码分析
for (int i = 0; i < Table1.Rows.Count; i++)
吹毛求疵,但将i
初始化为0
这使得更容易阅读…相信
HtmlSelect select = Table1.Rows[i].Cells[0].FindControl(string.Format("selectBoxstatus{0}", i)) as HtmlSelect;
我不太确定Form
在你原来的帖子意味着什么,但使用object
你迭代....更有意义Table1
行集合。我还提到Cell[0]
,这是迭代当前行的第一个单元格(随意调整它)…这仍然是不安全的,但这是在当前场景中实现它的唯一方法,如果您需要更多的代码安全性,那么诉诸选项一。还要注意的是,FindControl
没有使用自动生成的id,它只是使用为子控件
if(select != null)
尝试检索select
控件后,请确保检查控件是否成功检索。
希望有意义
尝试更改循环,以便在行上调用findcontrol:
for (int i = 1; i <= Table1.Rows.Count - 1; i++)
{
HtmlSelect select = Table1.Rows[i].FindControl("MainContent_selectBoxstatus" + i) as HtmlSelect;
}