繁体   English   中英

模型如何将Javascript FormData与Asp.net控制器模型绑定

[英]How model bind Javascript FormData with Asp.net Controllers Model

是否可以自动将ASP.NET控制器模型与ajax请求绑定,该请求将数据提交为FormData

在提供的示例中,我需要使用HttpContext.Current.Request.Form [“ property_name ”]来接收数据,因为如果我提供的模型与提交的表单数据相同,则所有值都等于null;

还是ASP.NET模型绑定仅适用于JSON请求?

简单的代码如下:

视图:

@using (Html.BeginForm("Post", "Test", FormMethod.Post, new { @class="test-form"}))
{
    <input type="text" name="firstName"/>
    <input type="text" name="lastName"/>
    <button type="submit">Submit</button>
}

脚本:

<script>
    $('.test-form').on('submit', function (e) {
        e.preventDefault();
        var formData = new FormData(this);

        $.ajax({
            url: "@Url.Action("TestPost", "Test")",
            method: "POST",
            data: formData,
            processData: false,
            success: function(e){
            }
        });
    });
</script>

控制器:

    [HttpPost]
    public ActionResult TestPost()
    {
        var firstname = HttpContext.Current.Request.Form["firstName"];
        var lastName =  HttpContext.Current.Request.Form["lastName"];
        return PartialView("TestPost");
    }

控制器不起作用:

   public class User
{
    public string firstName { get; set; }
    public string lastName { get; set; }
}

   [HttpPost]
    public ActionResult TestPost(User model) //model values are null
    {

        return PartialView("TestPost");
    }

当您将FormData对象与ajax一起使用时,数据将作为multipart/form-data发送,并且内容类型标头会自动为您设置正确的边界。
您可以覆盖内容类型,然后将tit设置为所需的任何值,这就是这里发生的情况。
您可能会认为我没有做到这一点,好朋友jQuery为您做到了。 它将为您设置$ .ajax的默认内容类型( application/x-www-form-urlencoded ),这几乎可以简化请求。
要停止此操作(即停止jQuery设置内容类型标头),必须将contentType参数设置为false。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM