0

私は少し精神的な断絶をしています。On This Topicを使用して JSON プリティ プリントを実行する方法を見てJSON.stringify(obj);きましたが、これを行う必要がある状況がありますが、json が実際に JavaScript に触れることはありません。これは、MVC ビュー モデルの単なる文字列です。このような「エラー」ビュー用です...

(他のオプションを開く場合は、jQueryを使用しています)

モデル

public class FailureViewModel{
        public string Name { get; set; }
        public string Message { get; set; }
        public string JSON { get; set; }
    }

こんな感じで動作します。操作が失敗すると、次のビューが生成されます。

コントローラ

        return View("Failure", new FailureViewModel{
            Name = "Some Error Name",
            Message = "There was an error and the changes were not submitted. Please submit this to the administrator",
            JSON = model.ToJson()
        });

意見

@model FailureViewModel

@{
    ViewBag.Title = "Error With Data Entry";
    Layout = "~/Areas/Administrator/Views/Shared/_Layout.cshtml";
}

<article>
    <aside class="red">
        @Model.Message
    </aside>
    <aside>
        <pre>
            @Model.JSON
        </pre>
    </aside>
</article>

基本的には、「文字列化」を実行して、すべてを適切にフォーマットして表示したいだけですが@Model.JSON、ビューを実際に複雑にすることなく、それを行うのに問題があります。助言がありますか?

4

1 に答える 1

2

@ から提供されたリンクからcharlietfl、目標を達成するために次のように設計しました。

モデルを見る

public class SuccessViewModel {
        public string Name { get; set; }
        public string Message { get; set; }
        public string JSON { get; set; }
    }

コントローラ

    return View("Success", new SuccessViewModel {
        Name = "The Title",
        Message = "The message",
        JSON = model.ToJson()
    });

意見

@model SuccessViewModel

@{
    ViewBag.Title = "Successful Data Entry";
    Layout = "~/Areas/Administrator/Views/Shared/_Layout.cshtml";
}


<article>
    <aside class="green">
        @Model.Message
    </aside>
    <aside>
        <pre id="json-result">
        </pre>
    </aside>
</article>

<script type="text/javascript">
    $(document).ready(function(){
        var str = JSON.stringify(@(new MvcHtmlString(Model.JSON)), undefined, 2); // indentation level = 2
        $('#json-result').html(str);
        console.log(str);
    });
</script>

延長方法

/// <summary>
/// Allows for any object to be serialized into Json very quickly.
/// </summary>
public static class JsonExtensions {
    /// <summary>
    /// Serializes an object to Javascript Object Notation.
    /// </summary>
    /// <param name="item">The item to serialize.</param>
    /// <returns>
    /// The item serialized as Json.
    /// </returns>
    public static string ToJson(this object item) {
        return Newtonsoft.Json.JsonConvert.SerializeObject(item);
    }
}
于 2013-01-15T22:35:00.567 に答える