ASP.NET MVC2 +文件上传(HttpPostedFileBase类)

时间:2011-06-08 16:32:01

标签: asp.net-mvc-2 file-upload httppostedfilebase

我上传文件时遇到问题。我想从修改视图

上传它
    <% 
    using (Html.BeginForm("edit","profile",FormMethod.Post, new { enctype="multipart/form-data" }))
    {%>
    <%: Html.ValidationSummary(true) %>

    <%: ViewData["ErrorMessage"] %>
    <fieldset>
        <legend>Fields</legend>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.Image) %>
        </div>
        <div class="editor-field">
            <input type="file" id="Image" name="Image" />
            <label id="LabelErrorImage" class="errorMessage" />
        </div> 

        <p>
            <input type="submit" value="Save" onclick="return Validate(); return false;"/>
        </p>
    </fieldset>

<% } %>

我想使用 HttpPostedFileBase 类。我的编辑操作:

[Authorize]
        [HttpPost]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(string id, HttpPostedFileBase file, FormCollection formValues)
        {
                    if (ModelState.IsValid)
                    {

                        if (file != null && file.ContentLength > 0)
                        {
                            CustomHelpers.createFolder();
                            var tmpPath = MyConfig.UPLOAD_FILE_PATH + "/" + Membership.GetUser().ProviderUserKey.ToString();
                            var path = Path.Combine(Server.MapPath(MyConfig.UPLOAD_FILE_PATH), "Avatar");
                            var fileExtension = Path.GetExtension(file.FileName);
                            file.SaveAs(path);
                            user.Image = "Avatar";
                        }
                        adventureDB.SaveChanges();

                        return RedirectToAction("Index");
                    }
        }

但我总是把文件对象清空,为什么?????你有任何想法,建议为什么它可以这样工作?可能有问题我如何将文件值传递给我的编辑操作?


修改  当我删除时,它真的很奇怪   using (Html.BeginForm("Index","Profile",FormMethod.Get, new { enctype="multipart/form-data" }))

页面来源仍然有:

<body>

    <form method="post" action="6111e591-b92d-4bcb-b214-ab8f664b35f9" id="form1">

我的意思是我无法更改标签但不明白为什么:/

3 个答案:

答案 0 :(得分:1)

尝试更改: -

public ActionResult Edit(string id, HttpPostedFileBase file, 
  FormCollection formValues)

于: -

public ActionResult Edit(string id, HttpPostedFileBase image, 
  FormCollection formValues)

输入的名称为image

 <input type="file" id="Image" name="Image" />

修改 说实话,其他东西正在阻止图像的绑定。这是您发布的整个表格吗?

要测试的一些事情

  1. 你有两次HTTPOST装饰你的方法,虽然我不相信这会有所作为。
  2. 查看来源并确保源中没有其他名为name=image的内容。
  3. 确保清空缓存并确保源代码正确无误再次测试
  4. 尝试使用<form action="/profile/index" method="post" enctype="multipart/form-data">
  5. 根据您的上次编辑判断您的母版页/布局有问题吗?这是mvc / webforms混合体吗?

答案 1 :(得分:1)

在以下情况下解决此问题:

  1. 我们使用Master.Site,
  2. 我们想在视图中上传文件,
  3. 我们确信它应该可以工作,但我们一直都是空的,
  4. 然后:

    1. 伙计们是对的 - 我认为我的名字错了 - 检查一下!
    2. 检查您的观点的源代码,如果您有2&lt;形式&gt;标签你应该删除&lt;形式&gt;从主站点标记,然后忽略第二个!
    3. 现在应该可以了。

答案 2 :(得分:0)

嗯,在您的视图中,您将文件输入命名为“image”,但您的操作方法接受名为“file”的参数。重命名其中一个,它应该工作。