2015-12-02 37 views
2

我是剃须刀视图引擎的新手。我遇到了想要上载图像浏览器的Image with Change事件的情况。一旦上传完成,如何获取json结果?

$("#billUpload").change(function(){ 
$('#uploadImageForm').submit(); 
} 

Razor视图代码如下:

@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data", id = "uploadImageForm" }))    
     { 
      <span class="file-input btn btn-sm btn-default btn-file"> 
       Browse&hellip; 
       <input id="billUpload" name="File" type="file"> 
      </span> 
     } 

控制器的代码是在这里:

[HttpPost] 
    public ActionResult Upload(HttpPostedFileBase file) 
    { 
     if (ModelState.IsValid) 
     { 
      if (file == null) 
      { 
       ModelState.AddModelError("File", "Please Upload Your file"); 
      } 
      else if (file.ContentLength > 0) 
      { 
       int MaxContentLength = 1024 * 1024 * 4; //Size = 4 MB 
       string[] AllowedFileExtensions = new string[] { ".jpg", ".gif", ".png", ".pdf" }; 
       if (!AllowedFileExtensions.Contains 
    (file.FileName.Substring(file.FileName.LastIndexOf('.')))) 
       { 
        ModelState.AddModelError("File", "Please file of type: " + string.Join(", ", AllowedFileExtensions)); 
       } 
       else if (file.ContentLength > MaxContentLength) 
       { 
        ModelState.AddModelError("File", "Your file is too large, maximum allowed size is: " + MaxContentLength + " MB"); 
       } 
       else 
       { 
        var fileName = Path.GetFileName(file.FileName); 
        var path = Path.Combine(Server.MapPath("~/Content/images/Bill/"), fileName); 
        file.SaveAs(path); 
        ModelState.Clear(); 
        ViewBag.Message = "File uploaded successfully. File path : ~/Content/image/Bill/" + fileName; 
       } 
      } 
     } 
     return Json("Done",JsonRequestBehavior.AllowGet); 
    } 

现在,这整个代码与上传没有问题,运行 jQuery的功能如下图像,但我不明白如何显示此警报框中的控制器返回此json消息。提前致谢。

+1

你应该用'ajax'提交表单来做到这一点。 – Azim

+0

在这种情况下,控制器将HttpPostedFileBase置空。我已经尝试过了。 –

+0

你指的是什么提示框?你做一个正常的提交,所以它只是要重定向到一个新的页面(并显示“完成”,因为你返回一个'JsonResult') –

回答

4

你可以像下面这样使用ajax。希望这可以帮助。

$("#billUpload").on('change', (function(e) { 
    e.preventDefault; 
    var formData = new FormData($('#uploadImageForm')[0]); 

    $.ajax({ 
     url : "/Home/Upload", 
     type : "POST", 
     data : formData, 
     cache : false, 
     contentType : false, 
     processType : false, 
     success : function(data) { 
      alert(data); 
     } 
    }); 
})); 
+0

这是一个很好的解决方案。但在IE8中不起作用。我建议使用[这个答案](http://stackoverflow.com/a/1960245/1849444)ajaxForm插件。 –

+0

你可以请告诉我,我应该放置html.beginform。因为我把上面给出的程序不叫控制器。:-( –

+0

是的,你应该放置'Html.BeginForm'。 – Azim