Asp.net mvc 3 通过ViewModel+;使用ajax调用将参数转换为操作
如何使用jQueryAjax将视图模型和另一个参数传递给动作方法 在我现在所做的工作中,没有调用action方法。我认为原因可能是jquery ajax调用的数据对象中没有正确传递参数:Asp.net mvc 3 通过ViewModel+;使用ajax调用将参数转换为操作,asp.net-mvc-3,jquery,actionmethod,Asp.net Mvc 3,Jquery,Actionmethod,如何使用jQueryAjax将视图模型和另一个参数传递给动作方法 在我现在所做的工作中,没有调用action方法。我认为原因可能是jquery ajax调用的数据对象中没有正确传递参数: contentType: 'application/json; charset=utf-8', jQuery ajax: $('#form-login').submit(function (event) { event.preventDefault();
contentType: 'application/json; charset=utf-8',
jQuery ajax:
$('#form-login').submit(function (event) {
event.preventDefault();
$.ajax({
url: "/Account/LogOn/",
data: $('#form-login').serialize(),
contentType: 'application/json; charset=utf-8',
success: function (data) {
if (data.userAuthenticated) {
window.location.href = data.url;
} else {
formBlock.clearMessages();
displayError($('#errorcred').val());
}
},
error: function () {
formBlock.clearMessages();
displayError($('#errorserver').val());
}
});
});
操作方法(接受视图模型和其他参数):
从$.ajax调用中删除以下内容:
contentType: 'application/json; charset=utf-8',
您指定了application/json
编码,但$(“#表单登录”).serialize()
函数正在发送application/x-www-form-urlencoded
内容
就发送returnUrl参数而言,您只需从表单action
中读取它(如果您使用Html.BeginForm()
helper):
此外,您可能还希望使用其他名称重命名事件
变量,因为这是javascript中的保留字:
$('#form-login').submit(function (e) {
e.preventDefault();
...
});
我发现的唯一方法是只在viewmodel中包含第二个参数,并继续以现在的方式序列化表单。但是,如何使用$('form login').serialize()正确映射参数,因为我有两个action方法参数:
$('form login').serialize()
将只接受表单中作为输入字段显示的参数。我注意到您有一个returnUrl
参数。当表单身份验证模块重定向到登录页面时,此参数通常出现在查询字符串中。如果您在其中使用了@Html.BeginForm()
帮助程序,它将是表单的操作
属性的一部分。因此,当您使用url:this.action
而不是像您那样对其进行硬编码(url:/Account/LogOn/“
)时,它将被传递到操作。如果您希望手动传递一个附加参数,最简单的方法是在表单中包含一个隐藏字段,然后在调用$.ajax方法之前在javascript代码中设置该隐藏字段的值。然后.serialize函数将考虑它。
$('#form-login').submit(function (e) {
e.preventDefault();
...
});