c# - 将 C# 数据结构传递给 javascript

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

这是我的 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);
    }

我正在尝试使用 Controller 传递给我的 C# 模型中的信息来填充 javascript 中的数据结构。这显然是一个可怕的黑客行为。有更好的方法吗?

最佳答案

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

@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()))
        }
    ]
}

关于c# - 将 C# 数据结构传递给 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22566369/

相关文章:

javascript - jQuery 无限滚动/延迟加载

asp.net-mvc - 在设置 TempData ["myvalue"] = "foo"之前调用 MVC 3 Session.Abandon() 导致下一个 Controller 将 TempData 设置为 null

asp.net-mvc-3 - EditorFor 上可为空的 DateTime - "Nullable object must have a value."

asp.net - 从 Controller 返回 razor 解析的 Javascript 作为 ViewResult

c# - 在 WPF 中关闭没有代码隐藏的窗口

c# - 在 C# 中寻找一个简单的独立持久字典实现

c# - 生成附属程序集时出现警告 AL1073

c# - 缓慢嵌套 'for' 循环读取 Excel 对象

javascript - 如何使javascript中的排序函数表现得像mysql order by

javascript - 在 JavaScript 中重载函数