2012-03-30 18 views
0

私は同じelemetsのcointainページに複数のajaxフォームを持っています。フォームの子要素と更新を検索するsucces関数がありますが、リクエストを送信したフォームのIDをどうにかして渡す必要があります。フォームから他の値と一緒にコントローラ、これを行うための最善の方法は何ですか?たぶんフォームに隠しフィールドを追加し、ページの読み込みでparentidを取得し、jQueryでこのフィールドに配置します。しかし、私はそれをうまくやっているjqueryを知らない。提出時にajaxフォームIDを渡す

@using (Ajax.BeginForm("Index", "Controller",new AjaxOptions { OnFailure = "error", OnSuccess ="sucess" })) 
      { 
       <input type="submit" name="value" class="up" value="1" /> 
       <span class="result">0</span> 
       <input type="submit" name="value" class="down" value="-1" /> 
      } 


public ActionResult Index(int value ,string formID) 
     { 
      //do something 
     } 

function sucess(arg) { 

     var json = $.parseJSON(arg.responseText); 

     var form = $("form#" + json.FormID); 

     var up = form.children('input.up'); 

     var down = form.children('input.down'); 

     form.children('span.result').replaceWith(json.Result); 

     if (json.Result == 1) { 

      up.addClass('active'); 

     } 

     if (json.Result == -1) { 

      down.addClass('active'); 

     } 
    } 

アップデート:これは部分的に表示され、n回ロードされるため、ブラウザでページがレンダリングされるまでformIDを見つけることができません。

答えて

6

あなたは、フォームのユニークなIDを与え、コールバックにこのIDを渡すことができます。

@{ 
    var formId = Guid.NewGuid().ToString(); 
} 
@using (Ajax.BeginForm("Index", "Controller", null, new AjaxOptions { OnFailure = "error", OnSuccess = string.Format("success(data, '{0}')", formId) }, new { id = formId })) 
{ 
    <input type="submit" name="value" class="up" value="1" /> 
    <span class="result">1</span> 
    <input type="submit" name="value" class="down" value="-1" /> 
} 

は今、成功関数内では、サーバーとのIDで返されるJSONの結果を取得することができるようになりますフォーム:

function success(json, formId) { 
    // Remark you don't need to call $.parseJSON here. 
    // inside the success callback the first argument will already 
    // represent a parsed object that you can use directly. This obviously 
    // assumes that your controller action returns JSON: 
    // return Json(new { Result = 1 }); 

    var form = $("#" + formId); 
    var up = form.children('input.up'); 
    var down = form.children('input.down'); 
    form.children('span.result').replaceWith(json.Result); 
    if (json.Result == 1) { 
     up.addClass('active'); 
    } 
    if (json.Result == -1) { 
     down.addClass('inactive'); 
    } 
} 
+0

jqueryメッセージボックスプラグインに解析せずにオブジェクトを渡したとき、私のエラー機能に問題があったので、完了する必要があると思いました。 YesコントローラがJsonを返します。 – formatc

+0

@ user1010609、はい、 'OnFailure'と' OnComplete'の中で引数を手動で解析する必要があります。 'OnSuccess' jQueryの内部だけがあなたのために解析します。 –

+0

お世話になりました、ありがとうございます!トリガの失敗に戻るための最良の状態コードは何かを教えてください。私は現在Firebug(実際ではない)にエラーを表示するBad Requestを送信しています。 – formatc

関連する問題