4

ASP.NET 2.0、PageMethods。

良い一日、

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

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

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

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


明確にするために、人の名前を含むドロップダウンリストがあります。ドロップダウンリストが変更されたら、ラベルにその人の電話を入れたいと思います。ただし、完全なポストバックを実行することは実際には最善の方法ではないと考えたため、PageMethodを使用して電話を取得し、ドロップダウンリストで選択したアイテムのIDを渡して電話を取得し、ラベルに配置することにしました。

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

4

4 に答える 4

5

あなたはajaxを持っているように見えるので、部分的なポストバックを行い、番号をラベルとビューステートに書き込んで、page_loadでビューステートからラベルに値を書き込んでください。

DropDownList イベント ハンドラで:

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

そしてPageLoadで:

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

Ajax を使用したくない場合は、aspx ファイルで HiddenInputField を定義し、コンテンツに JavaScript を入力し、Postback でラベルにコンテンツを入力します。aspx:

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

PageLoad:

myLabel.Text = myHiddenInput.Value;
于 2009-04-01T17:24:39.090 に答える
1

隠しフィールド ソリューションを使用することをお勧めします。これにより、ロジックを 1 か所にまとめることができます。

別の方法として、ページ メソッドの代わりに更新パネルを使用することもできますが、パフォーマンスが良くないため、私はそうしません。

他の人が言ったように、3番目の選択肢は、ドロップダウンで選択された値が変更されたときはいつでも、サーバー側で同じロジックを実行することです. 唯一の重複は、既に持っている適切なコードを呼び出すことです。

于 2009-04-01T16:55:37.880 に答える
0

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

そのロジックが複雑すぎる場合、または複数の場所で維持したくない場合は、次善のオプションは提案したものです。これがクリーンなソリューションではないと思う理由がわかりません。これは、クライアントからサーバーに情報を取得するための優れた方法です。

于 2009-04-01T14:03:29.573 に答える
0

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

于 2009-04-01T15:37:40.783 に答える