【问题标题】:Encode List to JSON将列表编码为 JSON
【发布时间】:2013-06-26 13:17:40
【问题描述】:

目标

使用 Razor 引擎将 List<T>Session["MySession"] 编码为 JSON。

问题

我的Index.cshtml 中有以下脚本:

<script type="text/javascript">
    var existingItems = 
        @Html.Raw
           (Json.Encode
              ((List<MyApp.Models.Data.getSpecificProductToShoppingList_Result>)
                  Session["ProdructsSummary"]))

    window.onload = function () {
        console.log(existingItems);
    }
</script>

existingItems 的返回是null。为什么?

观察

我确定——我的 Session 有一个价值。

【问题讨论】:

    标签: c# asp.net-mvc-4 razor json


    【解决方案1】:

    您不需要强制转换为基础类型。你可以简单地写:

    <script type="text/javascript">
        var existingItems = @Html.Raw(Json.Encode(Session["ProdructsSummary"]));
    
        window.onload = function () {
            console.log(existingItems);
        }
    </script>
    

    现在您说这会生成以下标记:

    <script type="text/javascript">
        var existingItems = null;
    
        window.onload = function () {
            console.log(existingItems);
        }
    </script>
    

    这个呢:

    <script type="text/javascript">
        @if (Session["ProdructsSummary"] == null) 
        {
            <text>alert('the session is null');</text>
        }
    </script>
    

    你能看到警报吗?我相信你可以看到它。假设你关于获取 null 的说法是真的,我什至准备赌 5 美元。

    结论:Session["ProdructsSummary"] 为空,所以不要指望Json.Encode 会返回其他内容。

    【讨论】:

    • 嗯...知道了。但是,这很奇怪......我有一个方法可以列出我的会话中的项目。顺便问一下,解决方法是什么? @Html.Raw(Json.Encode(Session["ProdructsSummary"]))?
    • 是的,这就是解决方案:@Html.Raw(Json.Encode(Session["ProdructsSummary"]))。你不需要铸造。如果会话中有内容,Json.Encode 方法将正确地将其序列化为 JSON,而无需显式告知底层类型。
    • 但达林,@Html.Raw(Json.Encode(Session["ProdructsSummary"])) 一直返回我为空。我明白你的解释(谢谢),但我无法申请。
    • 它返回 null 因为 Session["ProdructsSummary"] 为 null。你这么难理解吗?如果你希望得到这个值,你需要在Session["ProductsSummary"] 中有一些值。这不是 Json.Encode 助手的错。编码没有任何价值。
    • 达林,是我的错。看:Session["ProdRuctsSummary"]。当然这不存在。是的,正如我所说:我理解你的解释。非常感谢! +1
    猜你喜欢
    • 1970-01-01
    • 2019-07-28
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 2013-06-02
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多