2009-04-01 8 views
3

ASP.NET 2.0、PageMethods。ASP.NET PageMethodsのポストバックとlabel.textの値を保持する最もよい方法

良い一日、

ドロップダウンリストが私のページで変更されたとき、私は動的にラベルのテキストを変更するにはASP.NET AJAXのPageMethodsを使用しています。

私は、クライアントサイドで変更されたときに、ラベルのテキストがポストバックの間に保持されないことを知っています。私は解決策は、ラベルの内容を隠しフィールドに保存し、Page_Loadのそのフィールドからラベルテキストを設定することだと聞いてきました。

しかし、この解決策は私にとっては本当にきれいに見えません。他の選択肢やベストプラクティスはありますか?

ありがとうございました!


わかりやすくするために、私は人名のドロップダウンリストを持っています。ドロップダウンリストが変更されたら、ラベルにその人の電話を入れたいと思います。しかし、私は完全なポストバックを行うのが最良の選択肢ではないと考えていたので、ドロップダウンリストで選択された項目のIDを渡して電話を取得し、ラベルに入れてPageMethodで電話機を取得することにしました。

しかし、他のコントロールが完全なポストバックを引き起こすため、私はすべてのポストバックで電話を失います。私はそれを隠しフィールドに入れてから、完全なポストバックがあるときにPage_Loadのラベルに戻して設定することを知っていますが、別の解決策がある場合は、 WebMethodsは静的とマークされているので、Label.text = person.Telephoneと書くことはできません。それらの中に。

答えて

4

あなたはちょうど部分的なポストバックを行うことができ、ラベルとviewstateに番号を書いて、page_loadで値をviewstateからラベルに書き出します。DropDownListコントロールのイベントハンドラで

string phone = <.. get phone number ...>; 
myLabel.Text = phone; 
ViewState["currentPhone"] = phone; 

とPageLoad上:

myLabel.Text = (ViewState["currentPhone"] != null) ? (string)ViewState["currentPhone"] : string.Empty; 

あなたがアヤックスを使用したくない場合は、との内容を記入し、あなたのaspxファイルにHiddenInputFieldを定義することができますjavascriptとPostbackにはラベルが内容で埋められます。 ASPXで :PageLoad上

<asp:HiddenInputField runat="server" ID="myHiddenInput" /> 

myLabel.Text = myHiddenInput.Text; 

は、私は現時点ではわからないんだけど、代わりの.textの.VALUEすることができます。

+0

gsnerf、ありがとうございます。実際、私は、Page_LoadにmyLabel.Text = myHiddenInput.Text(または(文字列)ViewState ["phone"])を設定する以外の方法があるのか​​どうか疑問に思っていました –

0

ラベルの値がドロップダウンの値によって決まる場合は、そのロジックをサーバーに複製することができます。

ロジックが複雑すぎる場合や、メンテナンスしたくない場合は、複数の場所に次の最適なオプションがあります。なぜこれがきれいな解決策ではないと思うのか分かりませんが、これはクライアントからサーバーに情報を得るための素晴らしい方法です。

0

Page_Loadにコードを挿入して、ラベルにドロップダウンリストの値に基づいて必要な値が反映されていることを確認しましたか?この方法では、各ポストバックで少なくとも適切な値を取得し、2つの場所に格納することについて心配する必要はありません。

+0

私は、ポスターがドロップダウンリストの値を反映したがっているとは思っていません。 –

+0

ドロップダウンリストで選択された内容に基づいてテキストに何かが反映されるように思えます。 PostBackは毎回同じロジックを実行できます。 – Kelsey

1

私は隠されたフィールドの解決策に固執することをお勧めします、あなたは1つの場所であなたのロジックを維持することができます。

代わりに、ページメソッドの代わりに更新パネルを使用することもできますが、これはパフォーマンスにはあまり適していないためです。

第三者が述べたように、第3の選択肢は、ドロップダウンの選択された値が変更されるたびに、サーバー側で同じロジックを実行することです。唯一の重複は、あなたがすでに持っている適切なコードを呼び出すことです。

関連する問題