Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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
Asp.net mvc 4 使用asp.net mvc 4上载文件问题_Asp.net Mvc 4_Jquery File Upload - Fatal编程技术网

Asp.net mvc 4 使用asp.net mvc 4上载文件问题

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 )

我正在学习ASP.NETMVC,我对AJaxform和Jquery的使用感到困惑。通过谷歌上的一些答案,我能够理解JQuery是一个更好的选择,但仍然不明白为什么

这是我通过JQuery上传文件的代码,它将被上传到我的控制器,但我的HttpPostedFileBase文件CreatePost都将为null

模型

控制器

 [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,