Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 通过ViewModel+;使用ajax调用将参数转换为操作_Asp.net Mvc 3_Jquery_Actionmethod - Fatal编程技术网

Asp.net mvc 3 通过ViewModel+;使用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();

如何使用jQueryAjax将视图模型和另一个参数传递给动作方法

在我现在所做的工作中,没有调用action方法。我认为原因可能是jquery ajax调用的数据对象中没有正确传递参数:

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();

    ...
});