【问题标题】:Showing System.Web.Helpers.Chart in a partial view from the model在模型的部分视图中显示 System.Web.Helpers.Chart
【发布时间】:2012-03-29 22:17:28
【问题描述】:

所以我尝试了 System.Web.Helpers 命名空间中的图表助手。

根据http://www.asp.net/web-pages/tutorials/data/7-displaying-data-in-a-chart

我在 .cshtml 视图中制作图表,但我想将其保留在 ViewModel 中。

没有问题,除非我尝试在网站中将其呈现为较小的图像。

我认为最简洁的解决方案是创建一个共享的局部视图以从模型中呈现图形

_graph.cshtml

@model System.Web.Helpers.Chart

@Model.Write()

然后在适当的网站上以某种方式呈现这个局部视图。我尝试了几个版本,但似乎无法正常工作。

网站.cshtml

<div>
    <h2>Some header above a graph</h2>
    <img src="@Html.Partial("_graph", Model.TheChart)" />
</div>

这不起作用,我不确定该怎么做。我现在唯一想到的就是让所有带有图表的模型都继承一个暴露图表的接口,并让它成为_graph.cshtml的模型。

<img src="_graph.cshtml" />

但不确定 this 是否使用模型。

有什么意见吗?

【问题讨论】:

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


    【解决方案1】:
    <div>
    <h2>Some header above a graph</h2>
    <img src="@Url.Action("DrawChart")" />
    </div>
    
    public ActionResult DrawChart()
    {
    MyViewModel model = ...
    return View(model);  
    
    }
    

    !!!将模型参数发送到 DrawChart

    改成

    <div>
        <h2>Some header above a graph</h2>
        <img src="@Url.Action("DrawChart",Model)" />
    </div>
    
    public ActionResult DrawChart(MyViewModel _MyViewModel )
    {
        MyViewModel model = MyViewModel ;
        return View(model);
    }
    

    MyViewModel 为空

    向知道的人寻求建议。

    【讨论】:

    • MVC 无法映射复杂类型。因此,您要么必须使用简单类型来单独发送模型属性,要么使用 Ajax。
    【解决方案2】:
    <div>
        <h2>Some header above a graph</h2>
        <img src="@Url.Action("DrawChart")" />
    </div>
    

    然后你可以有一个控制器动作:

    public ActionResult DrawChart()
    {
        MyViewModel model = ...
        return View(model);
    }
    

    以及将绘制图表的相应视图 (DrawChart.cshtml):

    @model MyViewModel
    
    @{
        // TODO: use the data from the model to draw a chart
    
        var myChart = new Chart(width: 600, height: 400)
            .AddTitle("Chart Title")
            .AddSeries(
                name: "Employee",
                xValue: new[] {  "Peter", "Andrew", "Julie", "Mary", "Dave" },
                yValues: new[] { "2", "6", "4", "5", "3" })
            .Write();
    }
    

    以及渲染结果:


    【讨论】:

    • 是的,但我正在寻找一种方法,以便我可以在视图模型或单独的类中而不是在 cshtml 中创建图表。将其保存在 cshtml 中是否有任何性能原因?
    • @IngóVals,如果您不想使用,则不需要使用 .CSHTML。您可以直接在控制器操作中进行渲染。如果您对此解决方案感兴趣,我可以更新我的答案。但在所有情况下,在您的主视图中,您都应该使用 &lt;img&gt; 标记指向负责生成图表的服务器端操作。是否使用视图由您决定。使用视图的好处是控制器和显示之间的分离更清晰,但正如我所说,完全可以直接在控制器中生成图表。
    • 好的,我刚刚从控制器中的方法返回了图像,它工作得很好,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 2012-09-30
    • 2016-06-21
    • 2013-12-10
    • 1970-01-01
    • 2013-07-21
    相关资源
    最近更新 更多