Asp.net mvc 4 使用asp.net mvc 4上载文件问题
我正在学习ASP.NETMVC,我对AJaxform和Jquery的使用感到困惑。通过谷歌上的一些答案,我能够理解JQuery是一个更好的选择,但仍然不明白为什么 这是我通过JQuery上传文件的代码,它将被上传到我的控制器,但我的HttpPostedFileBase文件CreatePost都将为null 模型 控制器Asp.net mvc 4 使用asp.net mvc 4上载文件问题,asp.net-mvc-4,jquery-file-upload,Asp.net Mvc 4,Jquery File Upload,我正在学习ASP.NETMVC,我对AJaxform和Jquery的使用感到困惑。通过谷歌上的一些答案,我能够理解JQuery是一个更好的选择,但仍然不明白为什么 这是我通过JQuery上传文件的代码,它将被上传到我的控制器,但我的HttpPostedFileBase文件CreatePost都将为null 模型 控制器 [HttpPost] public ActionResult Index(HttpPostedFileBase file, CreatePost post )
[HttpPost]
public ActionResult Index(HttpPostedFileBase file, CreatePost post )
{
var test = post.userImage;
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/Content/Images"), fileName);
file.SaveAs(path);
}
return RedirectToAction("Index");
}
看法
$(函数(){
$('form')。提交(函数(){
if($(this).valid()){
$.ajax({
url:this.action,
类型:this.method,
数据:$(this).serialize(),
成功:功能(结果){
$('#result').html(result);
}
});
}
返回false;
});
});
@使用(Html.BeginForm(“Index”,“Home”,FormMethod.Post,new{nctype=“multipart/formdata”}))
{
@LabelFor(model=>model.userImage)
}
为什么我的file和post设置为null?在Ajax中上载文件时存在问题,我认为问题来自
form.Serialize()
,您可以使用FormData
它,如下所示:
p、 所有版本的浏览器都不支持FormData
<script type="text/javascript">
$(function () {
$('form').submit(function () {
//Below line is added
var formData = new FormData($('form')[0]);
if ($(this).valid()) {
$.ajax({
url: this.action,
type: this.method,
//Below line is changed
data: formData,
success: function (result) {
$('#result').html(result);
}
});
}
return false;
});
});
$(函数(){
$('form')。提交(函数(){
//下面的行被添加
var formData=新的formData($('form')[0]);
if($(this).valid()){
$.ajax({
url:this.action,
类型:this.method,
//下面的行已更改
数据:formData,
成功:功能(结果){
$('#result').html(result);
}
});
}
返回false;
});
});
此外,您的表单声明中也存在打字错误,将ncType
更改为enctype
如果您也要使用JqueryDialog,您可以发现此链接对上载文件很有用:
此属性在ajax调用中是必须的 processData:false, contentType:false。。。你的电话应该是这样的
$.ajax({
url: $url,
type: 'POST',
data: formData,
processData: false,
contentType: false,
非常感谢:)一个简单的问题是,在一个索引中,两个不同的表单可以有不同的jQuery吗?@Zerotoinfinite你是指两个不同版本的jQuery吗?不,我的意思是,如果我在1个索引中有两个Html.BeginForm,你可以,记得为每个表单设置id,比如
new{id='frm1',enctype=“multipart form data”}
并将脚本更改为使用表单id而不是$('form')
我的意思是类似$('frm1')
<script type="text/javascript">
$(function () {
$('form').submit(function () {
//Below line is added
var formData = new FormData($('form')[0]);
if ($(this).valid()) {
$.ajax({
url: this.action,
type: this.method,
//Below line is changed
data: formData,
success: function (result) {
$('#result').html(result);
}
});
}
return false;
});
});
$.ajax({
url: $url,
type: 'POST',
data: formData,
processData: false,
contentType: false,