【问题标题】:Passing C# Data structure to javascript将 C# 数据结构传递给 javascript
【发布时间】:2014-03-21 18:08:01
【问题描述】:

这是我的 javascript,下面是我的 C# 代码:

    //javascript in view
    var data = {
        labels: [@Misc.printData(Model.chartLabels, true)],
        datasets: [
            {
                fillColor: "rgba(151,187,205,0.5)",
                strokeColor: "rgba(151,187,205,1)",
                data: [@Misc.printData(Model.chartData, false)]
            }
        ]
    }

    //C# helper
    public static IHtmlString printData(IEnumerable<string> data, bool putQuotes)
    {
        string str = String.Empty;

        if (!data.Any())
            return new HtmlString(str);

        if (putQuotes)
            str = @"""" + data.Aggregate((result, next) => result + @""", """ + next) + @"""";
        else
            str = data.Aggregate((result, next) => result + ", " + next);

        return new HtmlString(str);
    }

我正在尝试使用控制器传递给我的 C# 模型中的信息来填充 javascript 中的数据结构。这显然是一个可怕的 hack。有没有更好的方法?

【问题讨论】:

  • 你可以使用 ViewBag 设置它更像是会话变量,但如果你不使用 MVC,你可以交流
  • 你考虑过将它作为 JSON 传递吗?

标签: c# javascript asp.net-mvc-3 razor


【解决方案1】:

使用 JSON.NET(可通过 NuGet 获得),您可以在 Razor 视图中执行此操作:

@Html.Raw(Newtonsoft.Json.Linq.JToken.FromObject(Model).ToString()))

这将写出您的 Model 对象的 JSON 表示。这当然可以封装在一个辅助函数中,这样就不会那么难读了。

为了匹配您的示例,您可以这样做:

var data = {
    labels: @Html.Raw(Newtonsoft.Json.Linq.JToken.FromObject(Model.chartLabels).ToString())),
    datasets: [
        {
            fillColor: "rgba(151,187,205,0.5)",
            strokeColor: "rgba(151,187,205,1)",
            data: @Html.Raw(Newtonsoft.Json.Linq.JToken.FromObject(Model.chartData).ToString()))
        }
    ]
}

【讨论】:

  • 太好了,谢谢!我以前从未使用过 JSON,但你让它变得非常简单。
  • @sirdank JSON 代表 JavaScript Object Notation,所以如果您使用过 JS,那么您在不知不觉中已经在使用 JSON。
【解决方案2】:

有一个非常好的库叫做 Json.Net,您可以使用它来将 .Net 对象序列化为 Json:

Json.Net

【讨论】:

    【解决方案3】:

    将其作为 JSON 传递。这是最好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多