在开发MVC应用程序时遇到了一个问题。

我从用于视图的简单模型开始,例如:

public class MyModel
{
    public HttpPostedFileBase[] Files { get; set; }

    public string Name { get; set; }
}


我有一个视图(Create.aspx)

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyModel>" %>
...
    <form method="post" action="/My/Create" enctype = "multipart/form-data">
        <input type="file" name="Files" />
        ...
        <%:Html.TextBoxFor(item=>item.Name) %>
        <input type="submit" value="Create" />
    </form>


控制器:

public class ActionController: Controller {
    public ActionResult Create() {
        var myModel = new MyModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult Create(MyModel model) {
        if(ModelState.isValid) { /* save */ }
    }

    public ActionResult Edit(int id) {
        var myModel = _manager.Get(id);
        myModel.Files = /* what to do here ? */

        return View(model);
    }

    [HttpPost]
    public ActionResult Edit(MyModel model) {
        if(ModelState.isValid) { /* edit */ }
    }
}


我的问题:如何创建要发送以查看和显示它们的HttpPostedFileBase对象(请参见下面的“编辑”页面)?

这些文件以nvarchar的形式存储在数据库中,并带有它们的相对路径(作为标签)。

我想保留已经保存的文件,只是更改名称字段。

从数据库中,我收到一个对象,该对象存储文件路径,文件类型和文件流。

对于Edit aspx页面:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyModel>" %>
...
    <form method="post" action="/My/Edit" enctype = "multipart/form-data">
        <input type="file" name="Files" />
        /* display here the files */
        ...
        <%:Html.TextBoxFor(item=>item.Name) %>
        <input type="submit" value="Create" />
    </form>

最佳答案

您根本无法使用HttpPostedFileBase显示文件。
如其描述所述:

用作提供对客户端上载的单个文件的访问权的类的基类。

它用于访问正在上传的文件。如果要显示已上传的文件,则必须使用其他方法,例如使用File方法。

07-24 09:51
查看更多