我正在使用ASP.NET MVC3和Jquery。我正在尝试使用类似的东西将表单元素传递回控制器(请注意,为简单起见,我删除了成功和错误代码):
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 :(得分: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);
这似乎无法列出所有表单元素。
答案 1 :(得分: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
}
答案 2 :(得分: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_id
和name_elem_id
是您的html元素的ID。并添加您需要的任何其他参数,只需按照步骤进行操作。
答案 3 :(得分: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
}
});