Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC Javascript对象_C#_Asp.net Mvc_Jqplot - Fatal编程技术网

C# MVC Javascript对象

C# MVC Javascript对象,c#,asp.net-mvc,jqplot,C#,Asp.net Mvc,Jqplot,我正在编写一个API和一个显示数据图表的网站。我已经编写了一个抽象的“图表”对象,它有一系列的集合、各种显示选项,以及您希望在图表对象上找到的其他内容 我使用这个抽象的图表对象来允许API的用户创建一个图表,API可以将其格式化为许多不同的输出。例如,它可以使用MSCharts创建图表图像,然后使用我自己的抽象图表对象中的适当设置填充它 我还试图获得它,以便我的网站部分可以使用jqPlot输出一个漂亮的动态JavaScript图表。我最初的计划是使用MVC局部视图,将我的图表对象作为模型,并将其

我正在编写一个API和一个显示数据图表的网站。我已经编写了一个抽象的“图表”对象,它有一系列的集合、各种显示选项,以及您希望在图表对象上找到的其他内容

我使用这个抽象的图表对象来允许API的用户创建一个图表,API可以将其格式化为许多不同的输出。例如,它可以使用MSCharts创建图表图像,然后使用我自己的抽象图表对象中的适当设置填充它

我还试图获得它,以便我的网站部分可以使用jqPlot输出一个漂亮的动态JavaScript图表。我最初的计划是使用MVC局部视图,将我的图表对象作为模型,并将其转换为JavaScript。这对格式化来说是一种可怕的痛苦,跳进Razor代码来做决定,退出以输出JavaScript等等

$.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也是我很难对付的东西。好问题。我希望能找到一个像样的答案。明天我要开始调查罗斯林的这类事情。