Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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_Asp.net Mvc_Post - Fatal编程技术网

C# 如何使用ajax发送字典和文件

C# 如何使用ajax发送字典和文件,c#,ajax,asp.net-mvc,post,C#,Ajax,Asp.net Mvc,Post,在我的html代码中有一个文件(没有表单标签) 此代码适用于文件,但不适用于字典 我怎样才能解决这个问题?提前感谢 你能试着这样做吗 var dict={ '[0].Key':'id-one'. '[0].Value':'aaaaa' } var data = new FormData(); data.append('Id', @Model.Id); data.append('Fields', dict); data.append('File',$('#file1')[0].files

在我的html代码中有一个文件(没有表单标签)

此代码适用于文件,但不适用于字典

我怎样才能解决这个问题?提前感谢

你能试着这样做吗

var dict={

  '[0].Key':'id-one'.
  '[0].Value':'aaaaa'
}
var data = new FormData();
data.append('Id', @Model.Id);
data.append('Fields', dict);
data.append('File',$('#file1')[0].files[0]);

$.ajax({
  url: '@Url.Action("Send")',
  data: data,
  processData: false,
  contentType: false,
  type: 'POST',
  success: function(data){
    alert(data);
  }
});
你能试着这样做吗

var dict={

  '[0].Key':'id-one'.
  '[0].Value':'aaaaa'
}
var data = new FormData();
data.append('Id', @Model.Id);
data.append('Fields', dict);
data.append('File',$('#file1')[0].files[0]);

$.ajax({
  url: '@Url.Action("Send")',
  data: data,
  processData: false,
  contentType: false,
  type: 'POST',
  success: function(data){
    alert(data);
  }
});

这里有很多问题

  • 您的
    文件
    属性的类型必须是
    HttpPostedFileBase
    ,而不是
    字符串
    。发布的值将是一个包含实际文件数据的流,而不是类似于客户端文件系统上的路径(这对您没有任何好处)

  • 您的文本输入当前没有名称属性,因此它们的数据根本不会包含在文章中,更不用说绑定了

  • 若要绑定到词典,必须为每个项发布
    成员,这需要为每个项提供两个输入

    <input type="hidden" name="Fields[0].Key" value="1" />
    <input type="text" name="Fields[0].Value" />
    
    <input type="hidden" name="Fields[1].Key" value="2" />
    <input type="text" name="Fields[1].Value" />
    
    <!-- etc -->
    

    这里有很多问题

  • 您的
    文件
    属性的类型必须是
    HttpPostedFileBase
    ,而不是
    字符串
    。发布的值将是一个包含实际文件数据的流,而不是类似于客户端文件系统上的路径(这对您没有任何好处)

  • 您的文本输入当前没有名称属性,因此它们的数据根本不会包含在文章中,更不用说绑定了

  • 若要绑定到词典,必须为每个项发布
    成员,这需要为每个项提供两个输入

    <input type="hidden" name="Fields[0].Key" value="1" />
    <input type="text" name="Fields[0].Value" />
    
    <input type="hidden" name="Fields[1].Key" value="2" />
    <input type="text" name="Fields[1].Value" />
    
    <!-- etc -->
    

    不能使用
    .append()
    将对象添加到
    FormData
    ,只能使用简单的值。您需要分别添加每个名称/值对

    var data = new FormData();
    data.append('Id', @Model.Id);
    data.append('Fields[0].Key', 'id-one'); // add the dictionary key
    data.append('Fields[0].Value', 'aaaaa'); // add the dictionary value
    data.append(File, $('#file1')[0].files[0]);
    $.ajax({
        ....
    });
    
    我假设您确实希望使用
    id=“id one”
    发布输入值,在这种情况下,输入值的
    data.append('Fields[0].value',$('id one').val())

    此外,正如Chris Pratt的回答中所指出的,您发布了文件输入的值,因此您在模型中的属性应该是

    public HttpPostedFileBase File { get; set; }
    

    不能使用
    .append()
    将对象添加到
    FormData
    ,只能使用简单的值。您需要分别添加每个名称/值对

    var data = new FormData();
    data.append('Id', @Model.Id);
    data.append('Fields[0].Key', 'id-one'); // add the dictionary key
    data.append('Fields[0].Value', 'aaaaa'); // add the dictionary value
    data.append(File, $('#file1')[0].files[0]);
    $.ajax({
        ....
    });
    
    我假设您确实希望使用
    id=“id one”
    发布输入值,在这种情况下,输入值的
    data.append('Fields[0].value',$('id one').val())

    此外,正如Chris Pratt的回答中所指出的,您发布了文件输入的值,因此您在模型中的属性应该是

    public HttpPostedFileBase File { get; set; }
    

    同样的效果:File是可以的,但dictionary是null。同样的效果:File是可以的,但dictionary是null。dict中的属性名没有帮助。我尝试过这个,但仍然是一个空字段。这是我最大的问题。dict中的属性名称没有帮助。我尝试过这个,但仍然是一个空字段。这是我最大的问题。非常感谢你的帮助。非常感谢你的帮助。
    public HttpPostedFileBase File { get; set; }