asp.net MVC jquery-formプラグインを使用してファイルをアップロードし、Json結果を返す
私はJQueryフォームプラグイン(https://jquery.malsup.com/form/))を使用してファイルとビューからいくつかの追加フィールドをアップロードしようとしています。アクションメソッドがJsonの結果をjavascriptコールバックに返すようにします。
現在、ActionMethodは正しく呼び出されています(フォームからファイルとフィールドを処理できます)が、Jsonの結果を返すと、ブラウザはファイルとしてダウンロードしようとします(ファイルをダウンロードしてその内容を表示すると、返されるJSONコンテンツです)。
これは私の形式です:
<form id=”FormNewFile” action=”@Url.Content(“~/Home/AddFile”)” method=”post” enctype=”multipart/form-data”>
<input type=”hidden” name=”eventId” value=”25″ />
<input type=”text” name=”description” />
<input type=”file” name=”fileName” />
<input type=”submit” value=”Send!” />
</form>
これは私のjavascriptです:
<script type=”text/javascript”>
$(function () {
$(“#FormNewFile”).ajaxForm({
dataType:’json’,
success:processJson
});
});
function processJson(a,b) {
alert(‘success’);
}
</script>
これは私のActionMethodです:
[HttpPost]
public ActionResult AddFile(long? eventId, string description)
{
int id = 5;
return Json(new {id});
}
ブラウザがダウンロードしようとするファイルの名前は、AddFilee87ce48eのようなもので、最後の8文字はランダムな16進文字です。
最後に、ダウンロードしたファイルの内容は次のとおりです。
{“id”:5}
javascriptのprocessJson関数は呼び出されません。
私はたくさんのグーグルで、動作するように見える唯一のことは、アクションメソッドからの “コンテンツ”結果としてJSON結果を返すことですが、それは私が取るつもりのアプローチだと思いますが、なぜこれが動作していないのかを知りたいですか?
何か案は?
私がやったことは、JSONとして返すオブジェクトを手動でシリアライズすることでした。これを行うと、レスポンスにヘッダーがないため、ブラウザではなくjavascriptで処理されます。私はこのヘルパーメソッドを使用しました:
public static ActionResult JsonPlain(object x)
{
var result = new ContentResult();
result.Content = new JavaScriptSerializer().Serialize(x);
return result;
}
これが他の誰かを助けることを願っています
source