2013-04-17 38 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 
    } 
}); 
相关问题