web-dev-qa-db-ja.com

JSON結果でAjax.BeginFormMVCヘルパーを使用する方法は?

ASP.NET MVC Ajax.BeginFormヘルパーを使用しようとしていますが、呼び出しの完了時に既存のコンテンツ挿入オプションを使用したくありません。代わりに、カスタムJavaScript関数をコールバックとして使用したいと思います。

これは機能しますが、必要な結果はJSONとして返されるはずです。残念ながら、フレームワークはデータを文字列として扱うだけです。以下はクライアントコードです。サーバーコードは、UppercaseNameという1つのフィールドを持つJsonResultを返すだけです。

<script type='text/javascript'>
    function onTestComplete(content) {
        var result = content.get_data();
        alert(result.UppercaseName);
    }
</script>

<% using (Ajax.BeginForm("JsonTest", new AjaxOptions() {OnComplete = "onTestComplete" })) { %>
    <%= Html.TextBox("name") %><br />
    <input type="submit" />
<%} %>

大文字の結果を表示する代わりに、未定義を表示しています。 content.get_data()はJSONを保持しているようですが、文字列形式のみです。これをオブジェクトに変換するにはどうすればよいですか?

これらはすべて、実際には少し複雑に思えます。 Ajax.BeginFormを使用して結果のコンテンツを取得するためのより良い方法はありますか?これが難しい場合は、Ajax.BeginFormを完全にスキップして、jQueryフォームライブラリを使用することができます。

21

これを試して:

var json_data = content.get_response().get_object();

これにより、JSON形式の結果が得られ、json_data[0]を使用して最初のレコードを取得できます

12
Kobi

以下のコードを使用してみてください。

<script type='text/javascript'>
    function onTestComplete(content) {
        var result = eval( '(' + content.get_data() + ')' );
        alert(result.UppercaseName);
    }
</script>
0
Russel

私が使う:

    function onTestComplete(data, status, xhr) {
       var data2 = JSON.parse(data.responseText);
       //data2 is your object
    }
0