我有这样的模型
public class FileDetail
{
public string Url { get; set; }
[NotMapped]
public HttpPostedFileBase File { get; set; }
public void UploadFile()
{
if (File != null)
{
try
{
...
Url = "data:image/png;base64," + Convert.ToBase64String(objImageBytes);
}
}
catch (Exception ex)
{
}
}
}
我有像这样的编辑/创建视图
...
@model ApplicationBase.Core.Common.FileDetail
@Html.TextBoxFor(x => x.File, new { type = "file", accept = "*" })
...
当我执行编辑操作时,默认模态活页夹将文件属性加载为字符串,
Request.Form
{File=17382.jpg}
当我执行Create操作时,默认模态绑定器将文件加载为HttpFileCollectionWrapper
Request.Form
{}
Request.Files
{System.Web.HttpFileCollectionWrapper}
AllKeys: {string[1]}
Count: 1
为什么会这样?这应该总是作为HttpFileCollectionBase,但是当我创建一个新的实体时它运行完美,那么当我编辑同一个实体时,它将File属性绑定为字符串而不是文件?
这里的问题是什么?
EDITED
我没有将File属性保存到db。我只使用它从输入字段绑定文件类型然后我运行UploadFile方法。该方法获取文件并创建base64字符串并将其放入FileDetail的Url属性。
然后我将实体保存到db。
已编辑2
[HttpPost, ActionName("Create")]
public ActionResult CreateConfirmed(FileDetail Detail)
{
...
}
[HttpPost]
public ActionResult Edit(FileDetail Detail)
{
}
答案 0 :(得分:1)
确保您的视图具有如下所示的多部分表单:
@using(Html.BeginForm(action, controller, FormMethod.Post, new { enctype="multipart/form-data"})
{
}