私はこれが何度も議論されてきたことを知っています。
私は基本的に、私の見解ではファイルを更新できるようにしたいと考えています。このファイルは、コントローラーが期待するモデルにマップする必要があります。
public ActionResult Create(Company company)
{
//Do something with the received model
}
モデル:
public class Company
{
public int Id { get; set; }
public HttpPostedFileBase PictureUpload { get; set; }
...
}
これは問題なく動作しています。ここで、ファイルを含むフォーム データを AJAX 経由で送信したいと考えています。したがって、私はこれを私の見解で使用しています:
@using (Ajax.BeginForm("Create", "Company", null, new AjaxOptions { HttpMethod = "Post", OnSuccess = "ajaxOnSuccess", OnFailure = "alert('Error message.');" }, new { @class = "ym-form", enctype = "multipart/form-data" }))
これは基本的に機能していますが、ファイルのアップロードは機能しません (私が読む限り、ajax はファイルにアクセスできないため、送信できません)。
バックエンド (コントローラー/モデル) を変更せずに、この問題の最善の解決策を教えてください。
例)この記事を読みました: http://ajeeshms.in/Blog/Article/1/upload-files-using-ajax-in-asp-mvc
これには 2 つの優れた可能性がありますが、バックエンドを変更する必要があります。これは、私のモデルで HttpPostedFileBase 型に自動的にマッピングすることができなくなるためです。
ビューに機能するプラグインを使用したり、新しいブラウザーでのみサポートされている手法を使用したりすることは気にしません。