2013-05-01 15 views
2

下面的代碼產生在這條線上href.NavigateUrl = "foo.aspx?id=" + id;空引用錯誤當我改變DropDownList的選擇,而不是當我輸入ID作爲查詢字符串參數。這似乎與事件的順序有關,但我不確定是什麼,或者如何解決它。的FindControl上看不見的面板中控制產生空引用錯誤

的.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的默認visbility設置爲true是一個,動人的超級鏈接是Panel2之外並直接改變其知名度是其他,但是那些都做正是我想要的,因爲有我在努力使人們看到其他控件/與叔一起無形他HyperLink。

有什麼想法?

+0

超鏈接HREF =(超鏈接)LoginView1.FindControl( 「HyperLink1」);你的這條線路出現問題,他沒有獲得超鏈接控制, – Rahul 2013-05-01 04:39:57

+0

我同意。你能提供關於如何正確定位它的任何建議嗎? – brainbolt 2013-05-01 05:51:12

+1

而不是顯示屬性嘗試樣式顯示:無; – Rahul 2013-05-01 05:52:32

回答

0

而不是使用下面的一行:

Panel2.Visible = true; 

嘗試使用:

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

我認爲當你設置Visiblefalse您面板的內容可能不會被渲染。

+0

如果我這樣做,面板的HTML內容將被傳遞到瀏覽器,但生成的DIV只會通過CSS不可見,對吧?這在這種情況下並不理想。對我來說,更改頁面的佈局以允許HyperLink位於Panel外部會更好。在我看來,應該有一種方法做什麼我之後... – brainbolt 2013-05-01 05:58:16

+0

爲什麼不理想,爲什麼你認爲它會得到更好的改變佈局的? – 2013-05-01 15:02:12

+0

我有被包括在除了超鏈接面板其它控制 - 的GridView,CheckBoxList的,等等,所有這些都正在數據綁定到基於被在上面提供的代碼被供給的ID的查詢。我不想處理並向瀏覽器遞送一堆無用的代碼,只是爲了使其不可見通過CSS。在這一點上,我認爲我只是將HyperLink移動到Panel外部,並直接設置HyperLink的可見性。 – brainbolt 2013-05-01 21:35:08