我不知道我缺少什么,但我需要使用C#MVC 3上传文件。我按照SO中的说明操作,但文件始终为空。
这是我的实际测试代码:
HTML
@using (Html.BeginForm("Prc", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="file" id="file" />
<input type="submit" value="submit" />
}
控制器
[HttpPost]
public ActionResult Prc(HttpPostedFile file)
{
if (file != null && file.ContentLength > 0)
{
var filename = System.IO.Path.GetFileName(file.FileName);
var path = System.IO.Path.Combine(Server.MapPath("~/Content/Images"), filename);
file.SaveAs(path);
}
return RedirectToAction("Index");
}
当我运行Web应用程序时,我附加了一个文件,然后单击“提交”。但是当我到达Controller
时,file
对象为null
。始终null
。我尝试了XML
文件,JPEG
文件和GIF
文件,但都没有。
除了 这些代码之外,我是否应该配置其他内容?
由于
答案 0 :(得分:2)
在MVC中,您需要使用HttpPostedFileBase
而不是HttpPostedFile
:
[HttpPost]
public ActionResult Prc(HttpPostedFileBase file)
{
//...
}
答案 1 :(得分:1)
还有一件事可能会让你失望。
使用asp.net mvc 3 razor,我很惊讶地发现传递给控制器方法的HttpPostedFileBase变量的名称必须匹配文件输入标记的id和名称。视图。否则asp.net会为HttpPostedFileBase变量传递null。
例如,如果您的文件输入如下所示:&lt; input type =“file”name =“filex”id =“filex”/&gt;
您的控制器方法如下所示: public ActionResult Uploadfile(HttpPostedFileBase filey)
对于“filey”变量,您将获得NULL。但是在控制器方法中将“filey”重命名为“filex”,它会成功发布文件。