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" />
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了..
每一点知识的积累,都是对生命的充实...