私はこのようなモデルを持っています
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)
{
}