2012-02-17 5 views
0

これを正しく説明できることを願っています。パネルを非表示にして表示しても、テキストボックスの値が失われる

私はサードパーティのショッピングカートソフトウェアの一部であるグリッドを持っています。このグリッドには数量のテキストボックスがあり、そこに顧客が購入したいものの数を入力します。

私は

myPanel.Visible=true; 

をオンまたはオフに設定することができますので、私はまた、表示するボタンがあり、上記のコードのメソッドを使用して非表示にするには、1つのパネルの内側に、このグリッドを置きます。

テキストボックスに値を入力してから非表示ボタンをクリックし、表示ボタンをクリックすると、パネルが再び表示されたときに値はゼロになります。その後、ページをリロードすると(ブラウザのリロード)、元の値に戻ります。それはかなり良い魔法のトリックですが、私は必要なものではありません。私は間違って何をしていますか?

最終的にカレンダーから日付を選択したいのですが、カレンダーは表示されていませんが、まだ再生されていません...表示/非表示ボタンのみです。

おかげ

答えて

1

は、これは正しいASP.NET WebFormsの行動とViewState

  1. 最初のページのロードように聞こえる:パネルが表示され、パネルはその初期値をロード。
  2. パネルを非表示:ボタンを押すとすぐにポストバックが発生します。 myPanelはinvisibleに設定されています。これは、サーバー側でパネルのHTMLが生成されないことを意味します(これは、生成されたHTMLを見て確認できます)。
  3. 表示パネル:ポストバックが再び発生します。しかし、前の手順では値がレンダリングされなかったため、パネルを再作成するために値がViewStateにはありません。
  4. ページのリロード:これは、(ステップ1と同じ)にわたって再びプロセスを開始

可能な解決策ではなく、クライアント側のパネル(<div)を非表示にすることです。これには、パネルを有効/無効にするだけでサーバーに往復することもないという利点があります。

+0

の後ろ説明フィリップいただきありがとうございます。とても役に立ちました。あなたは私に違った考えを持ってきました。私はCSSに2つのクラスを追加して、非表示と表示という非表示と表示を追加しました。そして、pnlMyPanel.CssClassをサーバー側から適切なものに設定しました。もう一度、ありがとう! – Deverill

+0

@Deverill、私が助けることができてうれしい喜び。 –

1

あなたのコードは以下のように...

ショーも、パネルは、Javaスクリプトである表示/非表示するボタンの定義を非表示にする必要があります。これは、サーバー側でButton Clickイベントのハンドラがないということです...このアプローチは、通常、速く提案されています。


サンプル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

+0

それはあなたを助けましたか? – Pankaj

+0

当時、私は別の方法を模索していたから実際にはありません。それが判明したとき、私はあなたが提供したものを正確に新たに必要としています。ありがとう。 +1 – Deverill

関連する問題