C# 如何使用ajax发送字典和文件
在我的html代码中有一个文件(没有表单标签) 此代码适用于文件,但不适用于字典 我怎样才能解决这个问题?提前感谢 你能试着这样做吗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
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; }