Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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
C# 通过Ajax发布表单数据会导致模型数据为空_C#_Ajax_Model View Controller_Fluentvalidation - Fatal编程技术网

C# 通过Ajax发布表单数据会导致模型数据为空

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) {

我试图发布我的表单数据,它是通过Ajax请求绑定到控制器的模型,然而,控制器显示数据为空,尽管请求头显示数据正在发送

代码如下。我尝试了data:JSON.stringify(form),它会生成一个空模型,而下面的示例会生成一个包含空数据的模型

看法

控制器

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,
       //(...)