0

我有一点精神上的脱节。我已经看到如何使用 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 回答