2012-02-17 34 views
0

我希望我可以正確解釋這一點。面板設置爲隱藏,然後可見丟失文本框的值

我有一個網格,是我們的第三方購物車軟件的一部分。這個網格有一排數量的文本框,客戶可以輸入他們想要購買的每件東西的數量。

我把這個網格在面板內部,所以我可以打開或關閉與

myPanel.Visible=true; 

我也有一個按鈕來顯示和一個設置它使用上述代碼方法來隱藏。

如果我在文本框中輸入一個值,然後單擊隱藏按鈕,然後單擊顯示按鈕,當面板重新出現時,值爲零。如果我然後重新加載頁面(瀏覽器重新加載),那麼該值將返回原樣。這是一個非常好的魔術,但不是我需要的。我究竟做錯了什麼?

最終,我想從日曆中選擇一個日期,同時它被隱藏,但那不是在播放中......只是顯示/隱藏按鈕。

感謝

回答

1

這聽起來像ASP.NET WebForms正確的行爲和ViewState

  1. 第一頁加載:面板是可見的,並加載初始值的面板。
  2. 隱藏面板:只要按下按鈕,就會發生回貼。 myPanel被設置爲不可見,在服務器端意味着不生成面板的HTML(這可以通過查看生成的HTML來確認)。
  3. 顯示面板:回發生再次發生。但是由於這些值未在上一步中呈現,因此ViewState中不提供這些值以重新填充面板。頁面的
  4. 刷新:該啓動過程重新(同步驟1)

一種可能的解決方案是替代隱藏在客戶側的面板(<div)。這也有利於不啓動服務器來啓用/禁用面板。

+0

謝謝你的解釋菲利普。這非常有幫助。你讓我有不同的想法。我結束了向我的CSS添加2個類,名爲Hide and Show,它執行了display:none,然後將pnlMyPanel.CssClass設置爲從服務器端正確的一個。再次,謝謝! – Deverill 2012-02-17 21:35:21

+0

@Deverill,很高興我能幫上忙。 – 2012-02-17 21:37:21

1

你的代碼應該是像下面......

顯示和隱藏按鈕定義顯示/隱藏面板中的Java腳本。那個人在服務器端沒有按鈕點擊事件的處理器...這種方法通常和快速地被建議..


樣品ASPX代碼

<script type="text/javascript" language="javascript"> 
    function Hide() { 
     var ID = document.getElementById('pnl'); 
     ID.style.display = 'none'; 
     return false; 
    } 

    function Show() { 
     var ID = document.getElementById('btnHide'); 
     ID.style.display = 'block'; 
     return false; 
    } 
</script> 
<asp:panel id="pnl" runat="server"> 
    <asp:GridView ID="grd" runat="server"> 
     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:Label ID="ed" runat="server" Text='<%#Eval("name") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 
</asp:panel> 
<asp:button text="Hide" runat="server" id="Button1" onclientclick="return Hide();" /> 
<asp:button text="Show" runat="server" id="btnShow" onclientclick="return Show();" /> 

示例代碼背後

public partial class Default4 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      using (DataTable Dt = new DataTable()) 
      { 
       using (DataColumn Dc = new DataColumn("Name")) 
       { 
        Dt.Columns.Add(Dc); 

        DataRow dr = Dt.NewRow(); 
        dr["name"] = "1"; 
        Dt.Rows.Add(dr); 

        dr = Dt.NewRow(); 
        dr["name"] = "2"; 
        Dt.Rows.Add(dr); 

        grd.DataSource = Dt; 
        grd.DataBind(); 
       } 
      } 
     } 

    } 
} 
+0

感謝您抽出寶貴的時間。 – Deverill 2012-02-17 21:36:54

+0

它對你有幫助嗎? – Pankaj 2012-02-17 21:41:56

+0

當時,並不是因爲我正在探索另一種方法。事實證明,我對你提供的東西有一個新的需求。謝謝。 +1 – Deverill 2012-02-19 19:25:09

相關問題