2014-09-27 47 views
0

我試了很久才明白爲什麼我的LinkBut​​ton文本在點擊時切換爲「on」,但是當我再次點擊該按鈕時,文本仍然顯示「on」,即使在我的代碼在文件後面我設置LinkBut​​ton.text =「off」。我已經運行了調試器,當我將文本設置爲「關閉」時,它的設置方法並不實際更新該特定的LinkBut​​ton對象,因爲下一次單擊它就像它永遠不會更新。LinkBut​​ton文本屬性在動態變化後沒有改變

我正在使用它來測試爲什麼我的面板在gridview模板字段內不會切換其可見性打開和關閉,因爲同樣的事情發生在那裏,我點擊一個按鈕,使面板可見它,然後當我再次按下按鈕面板應該消失,但它仍然在屏幕上。 我的目標是讓網格中的每一行都有一個切換鏈接按鈕,用於顯示在每行下方下降的面板。

所以我的問題的本質是,爲什麼我可以切換控件,但不能切換它?

我的標記基本上與以下相同。爲了清楚起見,所有實際正確的服務器屬性都保留爲 。

我的另一個想法是,該按鈕的階段是爲時已晚,我做的是將被放置在最終的HTML的變化呈現?

任何人都可以給我任何指針?背後

protected void changeName(object sender, CommandEventArgs e) 
    { 

     GridViewRow row = MyGridView.Rows[Convert.ToInt32(e.CommandArgument)]; 

     LinkButton button = (LinkButton)row.FindControl("LinkButton1"); 


     if (button.Text.Equals("off")) 
     { 
      button.Text = "on"; 

     } 
     else 
     { 
      button.Text = "off"; 
     } 
    } 
+0

請在設置'LinkBut​​ton.text ='off''和'Page_Load'方法的地方添加代碼。 – ekad 2014-09-27 12:22:22

+0

我只有一個爲點擊按鈕製作的方法,'Page_Load'方法中沒有代碼。我應該在'Page_Load'中有代碼嗎? – 2014-09-27 23:06:00

+0

那麼GridView綁定的地方在哪裏,pageload? – bashkan 2014-09-27 23:09:59

回答

0

<asp:GridView> 
    <Columns> 
    <asp:TemplateField> 
      <ItemTemplate> 
       <div id="wrapper"> 
         <asp:LinkButton ID="LinkButton1" runat="server" 
         CommandArgument='<%# ((GridViewRow)Container).RowIndex %>' 
         Text="off" oncommand="changeName"></asp:LinkButton> 
        </div> 
      </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

代碼我通過刪除我的「的EnableViewState = 「假」`在GridView上解決這個問題。

看完這篇文章 http://forums.asp.net/t/1590532.aspx?Visible+invisible+panel+inside+Gridview

之後它給了我在整個過程中回傳的一些想法。 我不確定這是否正確,但對我有意義嗎?

如果我的gridview禁用viewstate及其父對所有嵌套的控件,如'Panel'和'LinkBut​​ton',那麼嵌套控件的狀態將在回發中丟失。因此,任何 動態更改我修改的代碼後面的文件將丟失,如果更改不是 被保留在GridView的視圖狀態。

有可能是一種更好的方式來實現我的設計,但目前離開視圖狀態 父控制似乎修復它。