16

まず第一に、これについて私が見つけた唯一の投稿(calling-multiple-dopostback-from-javascript)は私の問題を助けなかったので、この投稿が重複しているとは思わない。

__doPostBack関数を含むこのJavaScript関数がASPXWebページにあります。

function OpenSubTable(bolID, controlID) {
  // code
  __doPostBack('UpdatePanelSearch', bolID);
  // more code
}

完全に機能し、次のようにbolIDの値をコードの背後に取り込むことができます。

protected void UpdatePanelSearch_Load(object sender, EventArgs e)
{
  var bolID = Request["__EVENTARGUMENT"];
  // code
}

問題は、ポストバックを介して2つの異なる値を渡さなければならないことです。これに対する簡単な解決策はありますか?明らかに、このようなものは機能しません:

function OpenSubTable(bolID, controlID) {
  // code
  __doPostBack('UpdatePanelSearch', bolID, controlID); // not that simple, i'm afraid :(
  // more code
}

どんな助けでも大歓迎です。

よろしく、グンナー

4

3 に答える 3

14

2つの値を1つのJSON文字列として渡すことができます。

function OpenSubTable(bolID, controlID) {
  __doPostBack('UpdatePanelSearch', JSON.stringify({ bolID: bolID, controlID: controlID}));
}

そして、サーバー上でそれを解析します。

protected void UpdatePanelSearch_Load(object sender, EventArgs e)
{
  SomeDTO deserializedArgs = 
      JsonConvert.DeserializeObject<SomeDTO>(Request["__EVENTARGUMENT"]);
  var bolID = deserializedArgs.bolID;
  var controlID = deserializedArgs.controlID;
}

public class SomeDTO
{
    public string bolID { get; set; }
    public string controlID { get; set; }
}

.Net> = 4.0を使用している場合は、一般的なtoupleに逆シリアル化して、を作成する必要がないと思いますSomeDTO。編集:動的型への逆シリアル化に関する詳細情報

于 2013-01-23T15:22:44.977 に答える
3

データをサーバー側の非表示フィールドに配置し、ポストバック後にそのデータを読み取ることを検討してください。

<asp:HiddenField id="Data1HiddenField" runat="server" />
<asp:HiddenField id="Data2HiddenField" runat="server" />

クライアントスクリプトには、サーバー側のネーミングコンテナの変更を処理するためのClientID値を含める必要があります。構文(Expression Builder)を使用するに<%= expression %>は、スクリプト(または少なくともスクリプトのこの部分)が.aspxファイル内に保持されている必要があります。JavaScriptを外部ファイルに保持している場合は、メインのJavaScriptによって呼び出される単純な関数を「登録」して、データを移動し、必要な関数とともにその関数サーバー側を構成できますClientIDs。を参照してくださいClientScriptManager.RegisterClientScriptBlock()

var data1 = "data value 1";
var data2 = "data value 2";
$("#<%= Data1HiddenField.ClientID %>").val(data1);
$("#<%= Data2HiddenField.ClientID %>").val(data2);

サーバー側のコードは次のようになります。

string data1 = Data1HiddenField.Value;
string data2 = Data2HiddenField.Value;

複数のデータ値を渡す方法は確かに他にもありますが、これは単純で保守が簡単であることがわかりました。あらゆる種類のデータを渡し、必要に応じてJSONを使用してエンコードできます。

于 2013-01-23T15:48:46.683 に答える
2

私は以前、文字列を作成して分割することにより、複数のパラメーターを使用しました。

例えば

string args = String.Format("{0};{1}", bolID, ControlID);

次に、これをポストバックの引数に渡すことができます。ポストバック引数をチェックするときは、スペレーション文字(この場合は';')に基づいて文字列を分割するだけです。

于 2013-01-23T15:19:24.640 に答える