我有两个问题,我不确定是否相关:
我有两个DropDownList控件(最初设置为不可见)和一个将autopostback行为设置为true的RadioButtonList控件。
每当发生回发时,我想从RadioButtonList控件中读取SelectedValue属性 - 并根据该属性,使其中一个DropDownLists可见。
这是我的问题:
1)我无法通过其ID直接引用RadioButtonList控件。 designer.cs文件似乎不生成RadioButtonList或DropDownList控件。即使我手动将控件添加到designer.cs文件中,它们也会在重新生成时丢失。这是预期的行为吗?
2)我尝试在Page_Load()方法中使用Page.FindControl属性。
if(Page.PostBack==true)
{
RadioButtonList rbl = (RadioButtonList)Page.FindControl("RadioButtonList1");
if(rbl.SelectedValue=="optionA")
{
DropDownList ddA = (DropDownList)Page.FindControl("DropDownListA");
ddA.Visible = true;
}
else
{
DropDownList ddB = (DropDownList)Page.FindControl("DropDownListB");
ddB.Visible=true;
}
}
但是我在if条件下得到NullReferenceException。
我完全走错了路吗?有人会指导我实现我想做的最佳方式吗?
另外,如何使designer.cs文件加载控件?
我自己想通了。我忘记了,而不是在桌子内使用控件。
一旦我将控件移到桌子外面,我可以直接引用ID。
缺乏睡眠和咖啡。我很抱歉。谢谢你的帮助!
答案 0 :(得分:2)
Page.FindControl不是递归的,即如果dropdownlist1控件在某个其他控件中,它将返回null。 请查看此链接以获取详细信息,并查看您是否能够正确找到下拉列表。
<强> http://www.mha.dk/post/Recursive-PageFindControl.aspx 强>
答案 1 :(得分:0)
您正在为rb1.SelectedValue分配一个值,您应该检查是否找到了控件。
if(rb1.SelectedValue="optionA")
应该是
if(rb1.SelectedValue != null)
{
if(rb1.SelectedValue == "optionA")
{
DropDownList ddA = (DropDownList)Page.FindControl("DropDownListA");
if (ddA != null)
ddA.Visible = true;
}
}
答案 2 :(得分:0)
如果您无法通过其ID引用控件,并且FindControl失败,则可能是在aspx文件中,您的控件缺少runat="server"
标记。
是这样的吗?