将列表编码为JSON



目标

使用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。为什么?

观察

我确信——我的会话有一个值。

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

<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>

你能看到警报吗?我相信你能看到。假设你关于变空的说法是真的,我甚至准备在上面下注5美元。

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