在开发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方法。