[英]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.