在asp.net mvc3上传文件

时间:2012-10-05 11:41:54

标签: c# asp.net-mvc asp.net-mvc-3 razor

我需要上传文件,我找到了几种方法。我想这样做的最好方法是根据这个博客: 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方法,当然没有选择文件,因为视图尚未打开。视图中还有一些其他文本框和下拉列表。但没什么特别的,任何人都知道我做错了什么?我有一种感觉,我错过了一些至关重要的东西......

2 个答案:

答案 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);
            }            
        }

但是文件永远不会被添加,它总是为空