asp.net MVC jquery-formプラグインを使用してファイルをアップロードし、Json結果を返す

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
ASP.NET MVCとjQueryフォームプラグインファイルのアップロード
ASP.NET MVCとJQueryフォームプラグイン/ファイルアップロードでIsAjaxRequest()を検出する
asp.net mvcのjquery ajaxアップロードファイル
Jqueryフォームプラグインファイルのアップロード
ASP.NET MVCとjQuery複数のファイルアップロードプラグインを使用した複数のファイルアップロード
Jqueryフォーム、ASP.NET MVC JSon結果
ASP .NET MVC3で実装されたサンプルプロジェクトプラグインjqueryファイルアップロードプラグイン
jQueryのajaxメソッドを使用したjQueryアップロードファイル(プラグインなし)
asp.net mvc jqueryファイルのアップロード時のサイズのチェック
asp.net MVCへの大きなファイルアップロード
Rating