ASP.NET MVC2.0页面与用户控件传递数据以及生成图表【总结】

  本篇主要介绍在MVC2.0下实现页面与MVC用户控件之间的数据传递...以及生成图表.也算是为MSChart控件做的一个最后总结..

  首先先说说在MVC下怎么使用用户控件..

  在页面引入用户控件有两种方式:

  1,Html.RenderPartial("/Control/View");

      这种方式是mvc1.0里的,比较灵活,但是没有独立的Action处理逻辑,这是来呈现一个视图.

  2, Html.RenderAction("ViewCon", "NewCon");

    这种方式是mvc2.0里带的,可以有独立的Action,也是本篇主要介绍的一种方式.

    具体的用法大家可以查MSDN。。这里不再列举

  MSChart这个控件在前几篇中都有介绍,并且都给出了用法示例,这里介绍的有一点点变动的地方就是在MVC中使用MSChart,与在webform中使用还有一点不一样滴..

  一会结合代码大家就能看明白了..

  新建MVC项目不用说了..

  Index页面的Action代码:

  public ActionResult Index()
        {
            List<int> vList = new List<int>();
            vList.Add(1);
            vList.Add(6);
            vList.Add(12);
            vList.Add(3);
            vList.Add(18);

            ViewData["Chart"] = vList;
            return View();
        }

很简单,为MSChart生成一些简单的数据..并保存在ViewData里面.

在Index  View里面引入用户控件:

 <p>
       <% Html.RenderAction("ViewCon", "NewCon", new { vd = ViewData }); %>
    </p>

这里需要介绍一下,ViewCon是Action名字,NewCon就是Controller名称了. 这里这个用户控件对应了一个ViewCon的一个Action,

new {vd = ViewData}这个是我们把当前页面的ViewData 当参数传递给ViewCon...

ViewCon 的Action:

  public ActionResult ViewCon(ViewDataDictionary vd)
        {
            TempData["Dictionary"] = vd;

            return View();
        }

vd与刚才引入用户控件的名称必须一致,这里的vd接收到的就是从主页面传递过来的ViewData,当然这里你可以传递任意数据,...

 之所以把这个ViewData又保存在TempData是为了给页面中的MSChart传递数据而用,因为TempData可以保存在一次请求当中,而ViewData不可以,

在NewCon这个用户控件的页面中写上:

<image src="/NewCon/GetChart" name="actin" />
非常简单,就是一个图片标记,GerChart这个Action才是我们生成图表的关键(生成验证码和这个原理一样吧,大家应该可以明白.)

GetChart Action代码

public FileResult GetChart()
        {
            ViewDataDictionary vd = TempData["Dictionary"] as ViewDataDictionary;

            Chart Chart2 = new Chart();
            Chart2.Width = 412;
            Chart2.Height = 296;

            Chart2.RenderType = RenderType.ImageTag;
            Chart2.Palette = ChartColorPalette.BrightPastel;
            Title t = new Title("ASP.NET MVC 柱状图", Docking.Top, new System.Drawing.Font("Trebuchet MS", 14, System.Drawing.FontStyle.Bold), System.Drawing.Color.FromArgb(26, 59, 105));
            Chart2.Titles.Add(t);
            Chart2.ChartAreas.Add("Series 1");
            // create a couple of series
            Chart2.Series.Add("Series 1");
            Chart2.Series.Add("Series 2");

            // add points to series 1
            foreach (int value in (List<int>)vd["Chart"])
            {
                Chart2.Series["Series 1"].Points.AddY(value);
            }
            // add points to series 2
            foreach (int value in (List<int>)vd["Chart"])
            {
                Chart2.Series["Series 2"].Points.AddY(value + 1);
            }

            Chart2.Series["Series 1"].ChartType = SeriesChartType.Column;
            Chart2.ChartAreas[0].Area3DStyle.Enable3D = true;

            Chart2.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
            Chart2.BorderColor = System.Drawing.Color.FromArgb(26, 59, 105);
            Chart2.BorderlineDashStyle = ChartDashStyle.Solid;
            Chart2.BorderWidth = 2;
            Chart2.Legends.Add("Legend1");

            MemoryStream momory = new MemoryStream();
            Chart2.SaveImage(momory, ChartImageFormat.Png);
            momory.Position = 0;
            return new FileStreamResult(momory, "image/png");
        }

ViewDataDictionary vd = TempData["Dictionary"] as ViewDataDictionary;这句话便是接收刚才保存在TempData里面的数据..

到此就OK了..

每一点知识的积累,都是对生命的充实...

posted on 2010-08-09 16:45  小刚qq  阅读(3291)  评论(1编辑  收藏  举报