0

jQueryを使用して、サーバー以外のコントロール(プレーンなhtmlコントロール)を更新パネルに動的に挿入しています。

完全なポストバックを実行すると、Request.Formを使用してこれらのコントロールの値を取得できますが、部分的なポストバックを実行すると、取得できません。

部分的なポストバック中にhtmlコントロールの値を取得できる必要がありますか?または、runat = "server"のコントロールのみですか?

フェイスボックスとファイルアップロードコントロールで遊んでいるので、サーバー以外のコントロールを使用しています...それはきれいではありません:-|

4

2 に答える 2

0

更新パネルは、非同期を実行する効率的な方法ではありません。

すでにjQueryを使用しているので、プロジェクトにWebサービス(.asmx)を追加してヒットします。この記事の図4の近くを参照してください:http://msdn.microsoft.com/en-us/magazine/cc163413.aspx

Request.Formは、コントロールが追加されていないビューステートから構築されます。

于 2011-02-12T08:56:09.803 に答える
0

部分ポストバックで必要な任意のフォーム コントロールまたはコントロールのすべての値を取得できます。これは些細な答えですが、一見しただけでは直感的にわかりません。多分それが ASP.net が死んでいる理由です。

のパラメータを覚えておいてください

__doPostback(string controlId,string param)

文字列、および ASP.net メソッド

Request.Params.Get("__EVENTTARGET"); // id
Request.Params.Get("__EVENTTARGET"); // parameter

文字列を返します。

したがって、簡単な答えは

  1. パーシャルで送り返したいすべてのフォーム要素のキーと値のペアを持つ JavaScript オブジェクトを構築します。

  2. そのオブジェクトを文字列化し、__doPostBack 呼び出しの 2 番目のパラメーターとして渡します。

サーバー側では、このプロセスを逆にして、オブジェクトと関心のあるすべてのフォーム値を抽出します。

例えば ​​:

var strigifiedObject = JSON.stringify(myFormObject);
var id = "partialPostback";
__doPostBack(id, strigifiedObject);

... 一方、サーバー側では

string id = Request.Params.Get("__EVENTTARGET");
string param = Request.Params.Get("__EVENTARGUMENT");

if (id == "partialPostback") {
    List<MyObj> formVals = new JavaScriptSerializer().Deserialize<List<MyObj>>>(param);
}
于 2016-06-13T05:47:01.123 に答える