当我更改DropDownList选项时,以下代码在此行href.NavigateUrl = "foo.aspx?id=" + id;
上产生空引用错误,但是当我输入id作为QueryString参数时则不会。它似乎与事件的顺序有关,但我不确定是什么,或者如何解决它。
的.aspx
<asp:Panel ID="Panel1" runat="server">
<asp:DropDownList ID="DropDownList1" runat="server"
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True">
<asp:ListItem Text="1" Value="1"></asp:ListItem>
<asp:ListItem Text="2" Value="2"></asp:ListItem>
</asp:DropDownList>
</asp:Panel>
<br />
<asp:Panel ID="Panel2" runat="server" Visible="false">
<asp:LoginView ID="LoginView1" runat="server">
<RoleGroups>
<asp:RoleGroup Roles="superadmin">
<ContentTemplate>
<asp:HyperLink runat="server" ID="HyperLink1">HyperLink</asp:HyperLink>
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
</asp:Panel>
.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["id"] != null)
{
if (!String.IsNullOrEmpty(Request.QueryString["id"]))
{
Panel1.Visible = false;
SetHref(Request.QueryString["id"]);
}
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
SetHref(DropDownList1.SelectedValue);
}
protected void SetHref(string id)
{
Panel2.Visible = true;
HyperLink href = (HyperLink)LoginView1.FindControl("HyperLink1");
href.NavigateUrl = "foo.aspx?id=" + id;
href.Text = href.NavigateUrl;
}
我找到了一些解决方法:将Panel2的默认可见性设置为true是一个,将HyperLink移到Panel2之外并直接更改其可见性是另一个,但这些都不是我想要的因为我正在尝试使用其他控件与HyperLink一起显示/不可见。
有什么想法吗?
答案 0 :(得分:0)
而不是使用以下行:
Panel2.Visible = true;
尝试使用:
Panel2.Attributes["style"] = "display:none";
我认为当您将Visible
设置为false
时,您的面板内容可能无法呈现。