如果我使用它作为我的控制器动作......失败。
[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();
}
当我运行我的网络应用程序并尝试上传文件时,我得到一个有效的进度条,获得一个随机百分比,然后返回一般错误。
此控制器动作非常完美。
[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?
答案 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中查看工作版和非工作版(强烈推荐),您会立即看到差异。