JSON を使用したいというおっしゃる理由がわかりませんが、Ajax でファイルのアップロードを実行する場合、MVC を使用しているのに組み込みの Ajax フォームを使用しないのはなぜですか? 簡単な例は次のようになります。
モデル:
public class ViewModel
{
[Required, Microsoft.Web.Mvc.FileExtensions(Extensions = "txt", ErrorMessage = "Specify a txt file.")]
public HttpPostedFileBase File { get; set; }
}
意見:
<div id="result"></div>
@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { UpdateTargetId = "result" }, new { enctype="multipart/form-data" } ))
{
@Html.TextBoxFor(m => m.File, new { type = "file" })
@Html.ValidationMessageFor(m => m.File)
}
コントローラ:
[HttpPost]
public ActionResult Action(ViewModel model)
{
if (ModelState.IsValid)
{
// Use your file here
using (MemoryStream memoryStream = new MemoryStream())
{
model.File.InputStream.CopyTo(memoryStream);
}
}
//Return some html back to calling page...
return PartialView("YourPartialView");
}