C# ASP.NET从代码隐藏切换控件可见性
我有两个不确定是否相关的问题: 我有两个DropDownList控件(最初设置为不可见)和一个RadioButtonList控件,其中autopostback行为设置为true 每当回发发生时,我想从RadioButtonList控件读取SelectedValue属性,并根据这一点,使其中一个DropDownList可见 我的问题是: 1) 我无法通过ID直接引用RadioButtonList控件。designer.cs文件似乎既不生成RadioButtonList控件,也不生成DropDownList控件。即使我手动将控件添加到designer.cs文件中,它们也会在重新生成时丢失。这是预期的行为吗 2) 我尝试在Page_Load()方法中使用Page.FindControl属性 但是我在if条件下得到了一个NullReferenceException 我完全走错路了吗?是否有人会指导我如何实现我的目标 另外,如何使designer.cs文件加载控件C# ASP.NET从代码隐藏切换控件可见性,c#,asp.net,code-behind,C#,Asp.net,Code Behind,我有两个不确定是否相关的问题: 我有两个DropDownList控件(最初设置为不可见)和一个RadioButtonList控件,其中autopostback行为设置为true 每当回发发生时,我想从RadioButtonList控件读取SelectedValue属性,并根据这一点,使其中一个DropDownList可见 我的问题是: 1) 我无法通过ID直接引用RadioButtonList控件。designer.cs文件似乎既不生成RadioButtonList控件,也不生成DropDown
编辑:/facepalm 我自己想出来的。我忘了在桌子里使用控件 一旦我将控件移到表外,我就可以直接引用ID
睡眠不足和咖啡不足是罪魁祸首。我道歉。谢谢你的帮助 您正在为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;
}
}
Page.FindControl不是递归的,即如果dropdownlist1控件位于其他控件中,它将返回null。 查看此链接了解详细信息,然后查看是否能够正确找到dropdownlist
如果无法通过控件ID引用控件,并且FindControl失败,则可能是在aspx文件中,控件缺少
runat=“server”
标记
是这样吗?对不起,写这篇文章时有打字错误。我的IDE中有它,但仍然会出错。[更正帖子]我注意到Page.FindControl(“RadioButtonList1”)返回空值。但我可以验证是否已在designer视图中添加了具有该特定ID的控件。(我仍然无法在designer.cs中看到它-所以可能这就是问题所在?)如果您已在design视图中将控件添加到UI,则不需要使用FindControl,只需使用ID即可。是的,我也这么认为。但正如我在帖子中所说,我无法通过ID引用它(甚至FindControl也无法找到它),我的UI中显然有这个控件。有什么问题吗?
if(rb1.SelectedValue != null)
{
if(rb1.SelectedValue == "optionA")
{
DropDownList ddA = (DropDownList)Page.FindControl("DropDownListA");
if (ddA != null)
ddA.Visible = true;
}
}