这是我的 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/