2013-04-17 74 views
3

我正在使用ASP.NET MVC3和Jquery。我想通過我的表單元素重新使用這樣的控制器(請注意,我刪除成功,錯誤代碼爲簡單起見):通過jquery向MVC控制器傳遞一個集合

var formElements = $("#myForm").serialize(); 
     $.ajax({ 
      type: "POST", 
      url: ScriptResolveUrl("~/Report/SubmitChanges"), 
      data: {collection: formElements}, 
      success: 
      error: 
      dataType: "json" 
     }); 

我的問題是我應該在我的控制器方法的參數看起來像: 這裏是我的控制器方法:

public ActionResult SubmitChanges(WHAT GOES HERE?) 
{ 
} 

那麼我現在真正需要的是什麼應該是參數進入控制方法的類型?我希望能夠檢索控制器中表單元素的值。

+0

你的回答很好地工作,如果我試圖收集傳給我會使用JSON服務器。 –

回答

0

假設你的表單元素都對應模型(假設它是MyModel),那麼它應該僅僅是:

public ActionResult SubmitChanges(MyModel model) 
{ 
} 

MVC默認模型綁定將做休息:)。

確保您在jQuery ajax方法中更改了data定義,但您已將其序列化。只要做到:

data: formElements, 

我假設在你的jQuery AJAX方法下面是一個複製和粘貼錯誤?

success: 
error: 

如果不是的話,那麼請確保你要麼刪除它,或將其更改爲:

success: function (result) { 
    //do something 
}, 
error: function() { 
    //do something on error 
} 
+0

謝謝,我特意省略了成功和錯誤的代碼,使它更具可讀性。問題是他們沒有與我的表單元素相對應的模型。 – carlg

+1

除了這個答案,你不需要做:'data:{collection:formElements},'。 'serialize()'沒有欺騙,所以你只需要'data:formElements'。 –

+0

@ user1031516然後,您必須將該操作結果作爲表單上的每個項目(不推薦),或者只是將您的頁面重新修改爲使用模型,並且它的所有字段都是 – mattytommo

0

的問題是,他們是沒有模型對應於我的形式 元素。

然後你就可以有這樣的:

public ActionResult SubmitChanges(int id, string name) 
{ 
} 

然後通過在單個項目:

var o = { 
    id = $("#id_elem_id").val(), 
    name = $("#name_elem_id").val() 
} 
$.ajax({ 
    type: "POST", 
    url: ScriptResolveUrl("~/Report/SubmitChanges"), 
    data: JSON.stringify(o), 
    success: 
    error: 
    dataType: "json" 
}); 

其中id_elem_idname_elem_id是你的HTML元素的ID。並添加所需的任何附加參數,只需按照下列步驟操作。

1

所以這就是我所做的。我的表單上有大約20-30個元素,所以我真的不想將每個元素都變成一個參數,或者將它們全部列在集合中。

在jQuery的,我做了以下內容:

var formElements = $("#myForm").serialize(); 

     $.ajax({ 
      type: "POST", 
      url: ScriptResolveUrl("~/Report/SubmitChanges"), 
      data: { parms: formElements }, 
      success: 
      error: 
      dataType: "json" 
     }); 

然後進入我的控制器爲一個字符串:

public ActionResult SubmitChanges(string parms) 

然後我發現了一個函數來解析該字符串(似乎是工作)

NameValueCollection qscoll = HttpUtility.ParseQueryString(parms); 

這似乎工作,沒有列出所有的表單元素。

0

你幾乎在那裏。剛剛擺脫了支架的周圍的data參數:

var formElements = $('#myForm').serialize(); 
$.ajax({ 
    type: 'POST', 
    url: ScriptResolveUrl("~/Report/SubmitChanges"), 
    data: formElements, 
    success: function(result) { 
     // handle the success of the AJAX request 
    }, 
    error: function() { 
     // an error occurred 
    } 
}); 
相關問題