javascript – ASP.Net MVC使用jquery-form插件上传文件并返回Json结果

前端之家收集整理的这篇文章主要介绍了javascript – ASP.Net MVC使用jquery-form插件上传文件并返回Json结果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 JQuery Form插件(http://jquery.malsup.com/form/)从我的视图上传文件和一些额外的字段,我希望action方法将Json结果返回给javascript回调.

目前,ActionMethod被正确调用(我可以处理表单中的文件和字段)但是当我返回Json结果时,浏览器会尝试将其作为文件下载(如果我下载文件并查看其内容,那就是JSON内容我要回来了.)

这是我的表格:

<form id="FormNewFile" action="@Url.Content("~/Home/AddFile")" method="post" enctype="multipart/form-data">
    <input type="hidden" name="eventId" value="25" />
    <input type="text" name="description" />
    <input type="file" name="fileName" />
    <input type="submit" value="Send!" />
</form>

这是我的javascript:

<script type="text/javascript">
     $(function () {
        $("#FormNewFile").ajaxForm({
           dataType:'json',success:processJson
     });
     });

     function processJson(a,b) {
        alert('success');
     }
  </script>

这是我的ActionMethod:

[HttpPost]
   public ActionResult AddFile(long? eventId,string description)
   {
      int id = 5;
      return Json(new {id});
   }

浏览器尝试下载的文件名称类似于AddFilee87ce48e,最后8个字符是随机十六进制字符.

最后,下载文件内容是:

{ “ID”:5}

并且javascript中的processJson函数永远不会被调用.

我google了很多,似乎唯一有用的就是将JSON结果作为动作方法的“内容”结果返回,我认为这是我要采取的方法,但我仍然想知道为什么这不是工作?

有任何想法吗?

解决方法

我最终做的是手动序列化我想要返回的对象作为JSON,如果我这样做,那么响应将没有标题,因此它将由javascript而不是浏览器处理.我使用了这个辅助方法
public static ActionResult JsonPlain(object x)
  {
     var result = new ContentResult();
     result.Content = new JavaScriptSerializer().Serialize(x);
     return result;
  }

希望这有助于其他人

猜你在找的jQuery相关文章