【问题标题】:File Upload logic in View and Controller(MVC3)View 和 Controller(MVC3) 中的文件上传逻辑
【发布时间】:2011-11-18 08:34:00
【问题描述】:

我想在 MVC 中实现文件上传逻辑,我的视图(cshtml)会包含这样的内容。

<div id="dialog" title="Upload files">
               <p><input type="file" id="fileUpload" name="fileUpload" /> </p>
        <p><input type="submit" value="Upload file" /></p>
    <% } %>
</div>  

而且我的控制器将具有保存文件的逻辑。

  [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult FileUpload(HttpPostedFileBase uploadFile)
    {
        if (uploadFile.ContentLength > 0)
        {
            string filePath = Path.Combine(HttpContext.Server.MapPath("../Uploads"),
                                           Path.GetFileName(uploadFile.FileName));
            uploadFile.SaveAs(filePath);
        }
        return View();
    }

如何链接点击事件来触发这个控制器?这只是我在网上得到的一个示例代码,如果不对,请告诉我。

谢谢, 阿达什

【问题讨论】:

    标签: asp.net-mvc-3 file-upload razor controller


    【解决方案1】:

    您将通过提交表单来触发此控制器操作,就像 MVC 范例一样。

    在视图中,您应该将此 HTML 放置在如下格式中:

    @using (Html.BeginForm("FileUpload", "<ControllerNameHere>", FormMethod.Post, new { enctype = "multipart/form-data" })) 
    { 
            <p><input type="file" id="fileUpload" name="fileUpload" /> </p>
            <p><input type="submit" value="Upload file" /></p>
    }
    

    这将触发您的控制器。 我不知道将文件用作参数是如何工作的。我通常在控制器中使用Request.Files 属性。

    【讨论】:

    • 使用 Request.Files 似乎是一个更好的主意,请使用示例代码:)
    • 这只是一个文件集合所以:if (Request.Files.Count &gt; 0) { foreach (HttpPostedFileBase file in Request.Files) { // Do your file stuff } }
    • 谢谢,在这种情况下我的控制器不会接受任何参数。在操作方法 [AcceptVerbs(HttpVerbs.Post)] 之前我需要这一行吗?
    • 确实,您的控制器将不再需要任何参数。是的,在这种情况下需要该属性,当您使用 HTTP Post 访问在这种情况下发生的操作时需要该属性,因为 formmethod 等于 post 并因此调用 POST。
    猜你喜欢
    • 1970-01-01
    • 2012-10-29
    • 2011-08-17
    • 2014-04-04
    • 2017-10-23
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多