【问题标题】:Pass form data via Ajax to Action通过 Ajax 将表单数据传递给 Action
【发布时间】:2017-01-24 14:11:25
【问题描述】:

我尝试在 MVC 中向 Action 传递许多值,但 user 始终为空。

var form = $('form');
    $.ajax({
        type: "POST",
        url: '@Url.Content("~/User/UpdateUser")',
        data: { user: form.serialize(), NameOfCare: care },
        success: function (result) {
            if (result == "Ok") {
                document.location.href = '@Url.Content("~/User/Index")';
            }
        }
    });

如何在 Ajax 中传递具有多个值的表单?

【问题讨论】:

  • 如果 UpdateUser 是您的操作方法,请使用 @Url.Action。此外,将您的操作方法代码放在这里。
  • 您可以使用.param() 方法添加其他数据 - 请参阅this answer。正如其他人所指出的,它必须是url: '@Url.Action(...)'

标签: javascript c# jquery ajax asp.net-mvc


【解决方案1】:

首先,您必须使用@Url.Action 而不是@Url.Content,因为您必须将form 数据发送到controller 才能处理data

.serialize 方法将一组表单元素编码为字符串以供提交。

你应该使用这个:data:form.serialize() + "&NameOfCare="+care

server-side 上,您的方法应如下所示:

public ActionResult(UserViewModel user,string NameOfCare){

}

user 对象将是 filled 与您的数据,使用 Model Binding

【讨论】:

    【解决方案2】:

    您正在发送一个序列化的对象,而它实际上是一个字符串。试试下面的例子。该操作将自动反序列化字符串。

            function load() {
            var dataT = $("#searchform").serialize();
            var urlx = "@Url.Action("SR15Fetch", "SR15", new { area = "SALES" })";
            debugger;
            $.ajax({
                type: "GET",
                url: urlx,    
                data: dataT,  
                cache: false,
                success: HandellerOnSuccess,
                error: HandellerOnFailer,
                beforeSend: Ajax_beforeSend(),
                complete: Ajax_Complete(),
            });
        }
    

    【讨论】:

    • 问题是关于向序列化对象添加一个额外的名称/值对 (NameOfCare: care),这根本没有解决这个问题。
    猜你喜欢
    • 2021-04-14
    • 2011-07-26
    • 2011-10-10
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多