0

私はこのようなモデルを持っています

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

...

Edit action を実行すると、デフォルトのモーダルバインダーはファイルプロパティを文字列としてロードし、

Request.Form
{File=17382.jpg}

Createアクションを実行すると、デフォルトのモーダルバインダーがファイルをHttpFileCollectionWrapperとしてロードします

Request.Form
{}

Request.Files
{System.Web.HttpFileCollectionWrapper}
    AllKeys: {string[1]}
    Count: 1

なぜこれが起こっているのですか?これは常に HttpFileCollectionBase である必要がありますが、新しいエンティティを作成すると完全に実行され、同じエンティティを編集すると File プロパティが file ではなく文字列としてバインドされますか?

ここで何が問題なのですか?

編集済み

File プロパティを db に保存しません。入力フィールドからファイルタイプをバインドするためにのみ使用し、次に UploadFile メソッドを実行します。そのメソッドはファイルを取得し、base64 文字列を作成して FileDetail の Url プロパティに配置します。

次に、エンティティを db に保存します。

編集済み 2

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

    [HttpPost]
    public ActionResult Edit(FileDetail Detail)
    {

    }
4

1 に答える 1

1

ビューに次のようなマルチパート フォームがあることを確認します。

@using(Html.BeginForm(action, controller, FormMethod.Post, new { enctype="multipart/form-data"})
{
}
于 2013-07-31T22:35:02.927 に答える