C# 通过Ajax发布表单数据会导致模型数据为空
我试图发布我的表单数据,它是通过Ajax请求绑定到控制器的模型,然而,控制器显示数据为空,尽管请求头显示数据正在发送 代码如下。我尝试了data:JSON.stringify(form),它会生成一个空模型,而下面的示例会生成一个包含空数据的模型 看法 控制器C# 通过Ajax发布表单数据会导致模型数据为空,c#,ajax,model-view-controller,fluentvalidation,C#,Ajax,Model View Controller,Fluentvalidation,我试图发布我的表单数据,它是通过Ajax请求绑定到控制器的模型,然而,控制器显示数据为空,尽管请求头显示数据正在发送 代码如下。我尝试了data:JSON.stringify(form),它会生成一个空模型,而下面的示例会生成一个包含空数据的模型 看法 控制器 public ActionResult CreateClient(ModelData form) { if (form == null || !ModelState.IsValid) {
public ActionResult CreateClient(ModelData form)
{
if (form == null || !ModelState.IsValid)
{
return Json("Error");
}
return Json("Success");
}
你的方法有两个问题 例如,如果模型类ModelData为
class ModelData {
public string Foo {get;set;}
public string Bar {get;set;}
}
要发送的适当数据是{foo:“foo1”,bar:“bar1”}
,或者最终是{foo:“foo1”,bar:“bar1”}
,这取决于您配置序列化的方式,正如您指定的contentType'application/json'
但是,您正在使用jquery读取表单。此方法返回一个字符串,格式为“foo=foo1&bar=bar1”
,适用于contentType
“application/x-www-form-urlencoded”。因此,您必须决定以何种格式发送数据。如果要继续使用serialize()从DOM获取数据,请改用'application/x-www-form-urlencoded'
第二,JSON。将从对象创建JSON字符串。字符串也是一个对象。因此,向这个函数传递一个字符串将把字符串包装成一个字符串,这没有多大意义:数据类似于“\”foo=foo1&bar=bar1\”
。同样,当contentType
为“json”时,jQuery ajax函数将期望其数据参数为一个对象,因此,如果您之前将对象转换为字符串,它将被发送为字符串。基本上,无论您最终为请求选择什么contentType
,都不要对数据参数使用JSON.stringify
TL;DR:要使其正常工作,请使用默认的contentType
,或按照下面的说明显式声明它,并按原样传递表单变量:
var form = $('#form').serialize();
$.ajax(
{
//(...)
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
data: form,
//(...)
var form = $('#form').serialize();
$.ajax(
{
//(...)
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
data: form,
//(...)