C# MVC Javascript对象
我正在编写一个API和一个显示数据图表的网站。我已经编写了一个抽象的“图表”对象,它有一系列的集合、各种显示选项,以及您希望在图表对象上找到的其他内容 我使用这个抽象的图表对象来允许API的用户创建一个图表,API可以将其格式化为许多不同的输出。例如,它可以使用MSCharts创建图表图像,然后使用我自己的抽象图表对象中的适当设置填充它 我还试图获得它,以便我的网站部分可以使用jqPlot输出一个漂亮的动态JavaScript图表。我最初的计划是使用MVC局部视图,将我的图表对象作为模型,并将其转换为JavaScript。这对格式化来说是一种可怕的痛苦,跳进Razor代码来做决定,退出以输出JavaScript等等C# MVC Javascript对象,c#,asp.net-mvc,jqplot,C#,Asp.net Mvc,Jqplot,我正在编写一个API和一个显示数据图表的网站。我已经编写了一个抽象的“图表”对象,它有一系列的集合、各种显示选项,以及您希望在图表对象上找到的其他内容 我使用这个抽象的图表对象来允许API的用户创建一个图表,API可以将其格式化为许多不同的输出。例如,它可以使用MSCharts创建图表图像,然后使用我自己的抽象图表对象中的适当设置填充它 我还试图获得它,以便我的网站部分可以使用jqPlot输出一个漂亮的动态JavaScript图表。我最初的计划是使用MVC局部视图,将我的图表对象作为模型,并将其
$.jqplot("chart", data, {
@if (chart.Animate) { <text>animate: true,</text> }
@if (chart.Animate) { <text>animateReplot: true,</text> }
title: '@Model.Title',
...
但是当你开始格式化这个系列的时候,它就失败了。jqPlot想让我做这样的事情:
series: [{
renderer: $.jqplot.LineRenderer
....
var jqPlotMapper = {
mapOptions : function (chartOptions)
{
return { seriesDefaults:{
renderer: this.getSeriesRenderer(chartOptions.chartType)
}};
},
getSeriesRenderer : function (chartType)
{
switch(chartType)
{
case "line": return $.jqplot.LineRenderer;
case "bar": return $.jqplot.BarRenderer;
}
}
};
$(document).ready(function(){
var chart = {};
chart.Data = [[2, 6, 7, 10]];
chart.Options = { chartType: "bar"};
plot1 = $.jqplot('chart1', chart.Data, jqPlotMapper.mapOptions(chart.Options));
});
我想不出用这种方式从MVC输出对JavaScript对象的“引用”的方法
在这一点上,我开始认为我可能需要编写一些东西来吐出原始JavaScript,然后在我的局部视图中使用Html.raw()
,但是,我一直认为一定有更好的方法
所以这就是我的问题-有更好的方法吗?通过部分视图呈现javascript代码很难维护,第二种选择更干净。图表JSON应该尽可能独立于JS呈现库,因此您将来可以在不接触MVC代码的情况下更改该库。使其工作的最后一个部分是一个javascript映射器,它可以从ChartJSON映射到jqplot特定的输入。大概是这样的:
series: [{
renderer: $.jqplot.LineRenderer
....
var jqPlotMapper = {
mapOptions : function (chartOptions)
{
return { seriesDefaults:{
renderer: this.getSeriesRenderer(chartOptions.chartType)
}};
},
getSeriesRenderer : function (chartType)
{
switch(chartType)
{
case "line": return $.jqplot.LineRenderer;
case "bar": return $.jqplot.BarRenderer;
}
}
};
$(document).ready(function(){
var chart = {};
chart.Data = [[2, 6, 7, 10]];
chart.Options = { chartType: "bar"};
plot1 = $.jqplot('chart1', chart.Data, jqPlotMapper.mapOptions(chart.Options));
});
MVC中的C#Javascript也是我很难对付的东西。好问题。我希望能找到一个像样的答案。明天我要开始调查罗斯林的这类事情。