ASP MVC4上传文件没有表单但部分查看

时间:2015-12-04 15:24:56

标签: c# asp.net asp.net-mvc-4 razor

是否可以使用带有Razor的ASP.NET MVC4上传文件,而无需在视图中使用表单(BeginForm<form>)。

我的问题是我在主视图上有部分视图来显示信息(日志),如果我使用表单,我可以通过HttpPostFileBase或{{1}获取有关正在上传的文件的信息但是,我的局部视图刷新,刷新整个页面,我最终只看到局部视图。如果我不使用表单,部分视图会正确更新,但我缺少有关该文件的所有信息。

我在ajax中尝试了Request.Files(更新了部分视图)。但我似乎无法让它发挥作用。

这是我的代码:

控制器:

preventDefault()

查看:

[HttpPost]
public PartialViewResult FileUpload(MyViewModel vm)
{
    vm.Log = new ScriptLog();
    if (Request.Files.Count < 1)
    {
        vm.Log.Add("File information missing");
    }
    else if (Request.Files[0].ContentLength < 1)
    {
        vm.Log.Add("File empty");
    }
    else
    {
        // Upload file and fill log
        vm.Log.Add("File uploaded successfully.");
    }

    return PartialView("Log", vm.Log);
}

1 个答案:

答案 0 :(得分:2)

好的,这是解决方案:

$("input[id=uploadButton]").on("click", function (e) {
    var fd = new FormData();    
    var input = document.querySelector("input");

    //fd.append({name of you variable in ViewModel}, value)
    fd.append('file', input.files[0]);

    $.ajax({
      url: '/MyContoller/FileUpload',
      data: fd,
      processData: false,
      contentType: false,
      type: 'POST',
      success: function(data){
        alert(data);
      }
    });
});

以下是一些参考资料:

MDN | Using FormData

jQuery | $.ajax()