使用Uploadify MVC3应用程序时,无法从方法返回ActionResult

时间:2011-05-27 19:36:40

标签: jquery debugging asp.net-mvc-3 uploadify

如果我使用它作为我的控制器动作......失败。

    [HttpPost]
    public ActionResult Index(HttpPostedFileBase FileData)
    {
        var saveLocation = Path.Combine(Server.MapPath("\\"),"returns");
        System.IO.Directory.CreateDirectory(saveLocation);
        FileData.SaveAs(Path.Combine(saveLocation, FileData.FileName));
        ViewBag.Message = String.Format("File name: {0}, {1}Kb Uploaded Successfully.", FileData.FileName, (int)FileData.ContentLength / 1024); 
        return View();
    }

当我运行我的网络应用程序并尝试上传文件时,我得到一个有效的进度条,获得一个随机百分比,然后返回一般错误。

enter image description here

然而!!

此控制器动作非常完美。

         [HttpPost]
         public String Upload(HttpPostedFileBase FileData)
         {
             var saveLocation = Path.Combine(Server.MapPath("\\"),"returns");
             System.IO.Directory.CreateDirectory(saveLocation);
             FileData.SaveAs(Path.Combine(saveLocation,FileData.FileName));
             ViewBag.Message = String.Format("File name: {0}, {1}Kb Uploaded Successfully.", FileData.FileName, (int)FileData.ContentLength / 1024);
             return ViewBag.Message; 
         }

以下是我上传页面中的代码。所有脚本引用都加载到site.master中。

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>



<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2><%: ViewBag.Message %></h2>
    <%= this.Profile.TaxPayerID  %>
    <p>Please upload your return</p>   
<script type="text/javascript">
    $(document).ready(
    function () {
        $("#fileuploader").fileUpload({
            'uploader': '/Scripts/uploader.swf',
            'cancelImg': '/Images/cancel.png',
            'buttonText': 'Select DR405',
            'script': 'Home/Upload',
            'folder': '/returns',
            'fileDesc': 'Image Files',
            'fileExt': '*.csv;*.txt;*.xls;*.xlsx',
            'auto': true
        });
    }
);
    </script>

<div id="fileuploader"></div>
</asp:Content>

为什么我不能返回ActionResult?

2 个答案:

答案 0 :(得分:1)

注意到这里的一些事情。不确定为什么你的MVC3应用程序有asp标签和页面声明标头。 uploadify需要输入tage type =“file”,页面上有唯一的ID,但您的示例指向div标记。尝试将其更改为<input type="file"/>代码。

答案 1 :(得分:0)

uploadify的典型上传处理程序(ashx版本)执行如下操作:

//  if the file was saved successfully...
{
    context.Response.Write("1");
}
else
{
    // Let client know about failure
    context.Response.Write("0");
}

这意味着客户端上传程序期望响应是简单的1或0文本字符串,如果成功则说明。这可能是他们可以使用的最简单的回报。

MVC中的等价物是返回字符串“0”或“1”以响应成功保存。这意味着您需要一个简单的返回类型string。如果您将“View()”作为ActionResult返回,则客户端上传器会从服务器返回整个HTML页面,并且不知道如何处理它(因此出错)。

如果您在Fiddler2中查看工作版和非工作版(强烈推荐),您会立即看到差异。