2

次のコードでは、DropDownList の選択を変更すると、この行で null 参照エラーが発生します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;
}

私はいくつかの回避策を見つけました.1つはPanel2のデフォルトの可視性をtrueに設定することであり、もう1つはハイパーリンクをPanel2の外に移動してその可視性を直接変更することです.私が試みている他のコントロールは、ハイパーリンクとともに表示/非表示にします。

何かご意見は?

4

1 に答える 1

0

次の行を使用する代わりに:

Panel2.Visible = true;

使用してみてください:

Panel2.Attributes["style"] = "display:none";

Visibleに設定すると、パネルのコンテンツがレンダリングされない可能性があると思いますfalse

于 2013-05-01T05:37:03.460 に答える