文件从

时间:2018-03-28 07:55:06

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

我有一个小工具可以根据指定的选项下载报告。下载效果很好。现在,我还要将文件上传到该文件夹​​,然后再使用它。

问题是我已经在表单上有一个用于下载的submit按钮,当我为上传添加另一个按钮时,只会触发下载。

我尝试使用@Html.ActionLink()来解决它,但没有成功。有没有正确的方法来解决这个问题?我知道有可能捕获submit值,然后检查ActionResult中的一个主Controller并重定向到相应的ActionResult,但我不会#39} ; t想要这样做,因为在一个控制器中有太多POST个动作。

这是我的查看 - download.cshtml:

@using (Html.BeginForm())
{
    <fieldset>
        <div class="title">Click to download report</div>

        <div class="field">
            <input id="downloadBtn" type="submit" class="button" value="Download" />
        </div>
    </fieldset>

    <fieldset id="Option_ClientInfo">
        <div class="title">
            Image
        </div>

        <div class="field">
            <input type="file" name="ImageUpload" accept="image/jpeg" />
            <p>@Html.ActionLink("Upload", "UploadImage", new { controller = "Home", enctype = "multipart/form-data"}, new { @class = "button" })</p>
        </div>
    </fieldset>
}

控制器 - HomeController.cs:

public partial class HomeController : Controller
{
    // some functions
    // ....

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult UploadImage(HttpPostedFileBase imageFile)
        {
            string path = Path.Combine(this.GetImageFolder, Path.GetFileName(imageFile.FileName));
            imageFile.SaveAs(path);
            return null;
        }

    // additional POST functions for other forms
    // ....

        [HttpPost]
        public ActionResult Download(Info downloadInfo)
        {
            // perform checks and calculations
            return new reportDownloadPDF(downloadInfo);
        }
}

赞赏任何建议。

1 个答案:

答案 0 :(得分:1)

解决方案只是使用两种形式单独上传和下载功能,因此在提交时不会发生冲突。

   @using (Html.BeginForm())
        {
            <fieldset>
                <div class="title">Click to download report</div>

                <div class="field">
                    <input id="downloadBtn" type="submit" class="button" value="Download" />
                </div>
            </fieldset>

            <fieldset id="Option_ClientInfo">
                <div class="title">
                    Image
                </div>
            </fieldset>
        }

        @using (Html.BeginForm("UploadImage", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
        {
            <fieldset>
                 <div class="field">
                    <input type="file" name="ImageUpload" accept="image/jpeg" />
                    <p>
                      <input id="uploadBtn" type="submit" class="button" value="Upload" />
                    </p>
                </div>
            </fieldset>
        }

还有另一个问题。图像控件名称和Post Action方法参数名称应该相同。

所以你的上传图片Post Action方法将是:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UploadImage(HttpPostedFileBase imageUpload)
 {
           string path = Path.Combine(this.GetBasePath + "/img/tmp/", Path.GetFileName(imageFile.FileName));
           imageFile.SaveAs(path);
           return null;
  }