2012-03-30 54 views
0

我在頁面上有多個ajax表單,它們共同擁有相同的元素,我在查找表單和更新的childrean元素的成功的jquery函數上,但我需要以某種方式傳遞請求的表單的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'); 

     } 
    } 

UPDATE:這是一個被載入了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" /> 
} 

成功的功能,您將能夠獲取由服務器返回的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 messagebox插件傳遞對象的問題,所以我認爲它需要完成。是的,控制器返回Json。 – formatc 2012-03-30 09:44:57

+0

@ user1010609,是的,在'OnFailure'和'OnComplete'裏面,你需要手動解析參數。只有在'OnSuccess'裏面,jQuery會爲你解析。 – 2012-03-30 09:49:42

+0

很高興知道,謝謝!你能告訴我什麼是最好的狀態代碼返回觸發失敗,我目前發送錯誤的請求,這導致螢火蟲(這是不是真正的)顯示錯誤。 – formatc 2012-03-30 09:53:05