我需要上传文件,我找到了几种方法。我想这样做的最好方法是根据这个博客: Blog
我在这里也发现了一个有用的帖子: stackoverflow topic
但是当我尝试它时,它失败了。我在visual studio中收到以下错误:
序列包含多个元素,没有更多内容可以继续使用。
我的代码如下所示:
控制器:
public PartialViewResult Index(parameterlist)
{
var model = new Model();
return PartialView(model);
}
[HttpPost]
public ActionResult Index(HttpPostedFileBase file)
{
// Verify that the user selected a file
if (file != null && file.ContentLength > 0)
{
// extract only the filename
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath(@"Path"), fileName);
file.SaveAs(path);
}
// redirect back to the index action to show the form once again
return RedirectToAction("Index");
}
查看:
<div class="span6">
@using (Html.BeginForm("null", "null", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="file" />
<input type="submit" value="OK" />
}
</div>
所以当这个partialview被调用时,它会转到actionResult方法,当然没有选择文件,因为视图尚未打开。视图中还有一些其他文本框和下拉列表。但没什么特别的,任何人都知道我做错了什么?我有一种感觉,我错过了一些至关重要的东西......
答案 0 :(得分:1)
为了避免执行错误的函数,你应该在Html.BeginForm中指定Controller和Action,而不是你在那里的空值。
@using (Html.BeginForm("Index", "YourController", FormMethod.Post, ...
答案 1 :(得分:0)
我尝试将它们合并到一个表单中,所以我的表单现在看起来像这样:
@using (Ajax.BeginForm("Method", "Controller",new { enctype = "multipart/form-data" }, new AjaxOptions { HttpMethod = "Post", OnSuccess = "Method" }, new { @class = "css", id = "formname" }))
{
Some divs and stuff
<input type="file" name="file" class="btn btn-inverse" />
</div>
该函数如下所示:
[HttpPost]
public void _SaveDocument(Model model, HttpPostedFileBase file)
{
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath(@"Path"), fileName);
file.SaveAs(path);
var command = new command()
{
Model = model
};
commandDispatcher.Dispatch(command);
}
}
但是文件永远不会被添加,它总是为空