C# 编辑具有文件默认模型的图元

C# 编辑具有文件默认模型的图元,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我有一个这样的模型 public class FileDetail { public string Url { get; set; } [NotMapped] public HttpPostedFileBase File { get; set; } public void UploadFile() { if (File != null) { try {

我有一个这样的模型

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 = "*" })

...
我有这样的编辑/创建视图

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}
当我创建操作时,默认模式绑定器将文件加载为HttpFileCollectionWrapper

Request.Form
{}

Request.Files
{System.Web.HttpFileCollectionWrapper}
    AllKeys: {string[1]}
    Count: 1
为什么会这样?这应该始终与HttpFileCollectionBase相同,但当我创建一个新实体时,它运行得非常完美,然后当我编辑同一实体时,它将文件属性绑定为字符串而不是文件

这里有什么问题

已编辑

我不将文件属性保存到数据库。我只使用它从输入字段绑定文件类型,然后运行UploadFile方法。该方法获取文件并创建base64字符串,并将其放入FileDetail的Url属性

然后我将实体保存到数据库中

编辑2

    [HttpPost, ActionName("Create")]
    public ActionResult CreateConfirmed(FileDetail Detail)
    {
    ...
    }

    [HttpPost]
    public ActionResult Edit(FileDetail Detail)
    {

    }

确保您的视图具有如下多部分表单:

@using(Html.BeginForm(action, controller, FormMethod.Post, new { enctype="multipart/form-data"})
{
}

编辑表单时,是否浏览新文件?是,我浏览新文件。但这一次,它没有绑定为文件。它绑定为字符串作为文件名,您可以发布创建和编辑操作。另外,为什么在模型中有UploadFile方法?实际上FileDetail不是一个简单的实体。它是一个业务对象,因此它做一些与自身相关的业务。我把问题简化了。通常情况下,操作方法和参数是不同的。但这对于这个场景来说并不重要,因为我只关注其中的Request.Files。两个操作都使用单一视图吗?如果没有,它们是否都有多部分表单?