MVC 学习笔记一

    技术2025-03-14  20

    1.模型:就是在MVC设计模式中需要被显示的数据。 2.视图:就是用来显示模型中数据的用户界面。一般来说,视图就是HTML页面。 3.控制器:就是用来处理用户的输入或者交互命令,以便改变模型的状态,选择适当的视图来显示对应模型的数据。 4.程序的一般执行过程:     (1)当用户在浏览器中输入浏览地址,发出页面的请求时,实际上是向控制器发出相关的命令。     (2)控制接收用户的请求命令之后,向模型请求获得相关的数据。     (3)模型将对应的数据返回给控制器。     (4)控制器将有关数据发送到指定的视图。     (5)指定的视图呈现被指定的数据。     创建RouteTable、URL路由、执行MvcHandler、执行Controller、执行View()方法。 5.对于每一个控制器,在Views文件夹中都有一个与控制器名称相对应的目录与其对应存在。控制器的名称必须命名为形如"XXXController"的格式,并且必须实现接口Icontroller,或者继承抽象类Controller类。在控制器中所定义的动作方法,必须设置为public,如果是一个内部方法,可以在该方法中设置过滤器[NonActionAtrribute]。 6.ASP.NET 3.5 MVC 框架在配置文件Web.config中注册了专门的HTTP模块,在httpModules节中,注册了UrlRoutingModule类,用于解析URL的路由,这是使用ASP.NET 3.5 MVC 框架与传统的ASP.NET 程序的根本区别。 7.在ASP.NET 3.5 MVC 框架中,页面到控制器的映射是通过路径表(Route Table)来实现的,每一个应用程序都有一个路径表,路径表通过RouteTable.Routes属性取得。 8.优化路由设置:     可以通过设置路由名称,如:         routes.MapRoute(             "products-route",             "products/{category}",             new { Controller = "products", action="category" }         );         上述被设置的路由名称为”products-route“,如果在视图中生成相关的路由链接,则可以如下使用:             <%= Html.RouteLink("Show Beverages","products-route",new {category="beverages"}) %>。     可以将最常用的路由存放在路由表的最前面。这样不公提高生成URL路由的效率,而且还提高路由解析的效率。但需要注意路由的次序改变是否实质性影响匹配结果。     9.自定义路由约束:         在需要自定义路由约束时,需要实现接口IRouteConstraint中的Match()方法。         如:            public class YearRouteConstraint:IRouteConstraint     {         #region IRouteConstraint 成员         public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)         {             if (routeDirection == RouteDirection.IncomingRequest && (parameterName.ToLower(System.Globalization.CultureInfo.InvariantCulture) == "year"))             {                 try                 {                     int year = Convert.ToInt32(values["year"]);                     if ((year >= 1900) && (year <= 2100))                         return true;                 }                 catch                 {                     return false;                 }             }             return false;         }         #endregion     } 10.在传统的Web Form 项目中使用路由,首先需要创建实现IRouteHandler接口的WebFormRouteHandler类,然后在全局应用程序类中配置路由的映射即可。     如:         public class WebFormRouteHandler:IRouteHandler     {         public WebFormRouteHandler(string virtualPath)         {             this.VirtualPath = virtualPath;         }         public string VirtualPath { get; set; }         #region IRouteHandler 成员         public IHttpHandler GetHttpHandler(RequestContext requestContext)         {             var page = System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(System.Web.UI.Page)) as IHttpHandler;             return page;         }         #endregion     }     然后在全局应用程序类中进行配置,如:         routes.Add("named",new Route("foo/bar",new WebFormRouteHandler("~/forms/blech.aspx")));         routes.Add("Numbers",new Route("one/two/three",new WebFormRouteHandler("~/forms/haha.aspx")));//设置了一个名称为”Numbers“的路由,将被添加的路由"one/two/three"映射为传统的”~/forms/haha.aspx“页面。 11.HtmlHelper 类(System.Web.Mvc.Html)[FormExtensions、InputExtensions、LinkExtensions、SelectExtensions、TextAreaExtensions、ValidationExtensions、RenderPartialExtensions]     FormExtension类---BeginForm()|BeginRouteForm()|EndForm()     InputExtensions类---CheckBox()|Hidden()|Password()|RadioButton()|TextBox()     LinkExtension类---ActionLink()|RouteLink()     RenderPartialExtensions类---RenderPartial()     SelectExtensions类---DropDownList()|ListBox()     TextAreaExtensions类---TextArea()     ValidationExtensions类---ValidationMessage()|validationSummary() 12.HtmlTextWriter类--此类位于System.Web.UI之下。主要功能是向客户端输出指定的标记字符和文本。在使用HtmlTextWriter类时,需要创建HtmlTextWriter类的一个实例,在该构造函数中,需要输入抽象类System.IO.TextWriter子类的一个实例化对象,如HtmlTextWriter writer=new HtmlTextWriter(new System.IO.StringWriter()); 13.自定义视图引擎:要创建自己的视图引擎,可以通过继承System.Web.Mvc.IViewEngine 接口,或者继承抽象类VirtualPathProviderViewEngine,覆盖此类的CreateView()和CreatePartialView()。 14. MSChart图表控件:     (1)在MSChart的命名空间System.Web.UI.DataVisualization.Charting中定义了一个枚举SeriesChartType,其中设置了35种图表类型。     (2)在MSChart的命名空间System.Web.UI.DataVisualization.Charting中定义了一个StatisticFormula类,其中设置了19种统计分析函数。在使用统计分析函数,首先需要Chart类的一个实例化对象,然后通过这个实例化对象的DataManipulator属性,调用DataManipulator类的父类---DataFormula类中的Statistics属性,得到StatisticFormula类的一个实例化对象,然后调用StatisticFormula类中的相关统计方法。如:chart1.DataManipulator.Statistics.FTest(0.0t,"Series1","Series2");     (3)在MVC中使用图表控件:         首先在控制器中编写获取数据的代码,如:             using System.Web.UI.DataVisualization.Charting;               public ActionResult GetChart()         {             NorthwindDataContext db = new NorthwindDataContext();             var query = from c in db.Customers                         select new                         {                             Customer = c.ContactName,                             Country = c.Country,                             Sales = c.Orders.Sum(o => o.Order_Details.Sum(od => od.Quantity * od.UnitPrice))                         };             var xValues1 = query.GroupBy(group => group.Country).Select(country => country.Key).Take(8).ToList();             var yValues1 = query.GroupBy(group => group.Country).Select(x => x.Sum(order => order.Sales)).Take(8).ToList();             var result = query.Select(x => new { Customer = x.Customer, Sale = x.Sales }).Take(8).ToList();             Chart chart1 = new Chart();             chart1.Width = 600;             chart1.Height = 500;             chart1.Palette = ChartColorPalette.BrightPastel;             chart1.BackColor = Color.WhiteSmoke;             chart1.BorderlineDashStyle = ChartDashStyle.Solid;             chart1.BorderlineWidth = 2;             chart1.BackGradientStyle = GradientStyle.TopBottom;             chart1.ChartAreas.Add("ChartAreas1");//包括两个图表区域             chart1.ChartAreas.Add("ChartAreas2");             chart1.ChartAreas["ChartAreas1"].BackColor = Color.Transparent;             Title t = new Title("不同国家产品销售额");//图表的标题             chart1.Titles.Add(t);             chart1.Series.Add("Series 1");//包括两个图序             chart1.Series.Add("Series 2");             chart1.Series["Series 1"].ChartType = SeriesChartType.Pie;//为饼图             chart1.ChartAreas["ChartAreas1"].Area3DStyle.Enable3D = true;//出现3D效果             chart1.Series["Series 1"]["PieLabelStyle"] = "OutSide";             //第一个图序数据的绑定             chart1.Series["Series 1"].Points.DataBindXY(xValues1, yValues1);             //让Brazil的数据出现分裂效果             foreach (DataPoint point in chart1.Series["Series 1"].Points)             {                 point["Exploded"] = "false";                 if (point.AxisLabel == "Brazil")                     point["Exploded"] = "true";              }             chart1.Series["Series 2"].Points.DataBind(result, "Customer", "Sale", "Label=Sale");//第二个图序数据的绑定             chart1.Series["Series 2"].ChartType = SeriesChartType.Column;             chart1.Series["Series 2"].ChartArea = "ChartAreas2";//第二个图序在第二个图表区域中             chart1.Series["Series 2"].IsValueShownAsLabel = true;//把元素所对应的数据显示出来             chart1.ChartAreas["ChartAreas2"].Area3DStyle.Enable3D = true;             System.IO.MemoryStream imgStream = new System.IO.MemoryStream();             chart1.SaveImage(imgStream, ChartImageFormat.Png);             imgStream.Position = 0;             return new FileStreamResult(imgStream, "image/png");         }         然后在视图中添加如:<img src="/Home/GetChart" alt="Chart" /> 即可。 15.个性化ASP.NET 3.5 MVC 项目的目录结构:     (1)设置视图路径:如在控制器”HomeController”中如下设置:         public ActionResult List(){                 return View("Prodcut/List");             }     (2)设置视图查询的路径:在asp.net 3.5 mvc 框架中, 默认的视图引擎是WebFormViewEngine类,  在该类中, 通过设置MasterLocationFormats属性, 可以个性化母版页的目录结构; 通过设置ViewLocationFormats属性,  可以个性化视图页面的目录结构; 通过设置PatialViewLocationFormats属性, 可以个性化用户控件的目录结构。如:         ViewEngines.Engines.Add(new WebFormViewEngine()         {             ViewLocationForats = new string[]{                 "~/Views/{1}/Product/{0}.aspx",                 "~/Views/{1}/Product/{0}.ascx"             }         }         上述代码设置了WebFormViewEngine中的ViewLocationFormats属性,即视图页面可以个性化存在在View文件夹中的Home目录下的Product子目录中。 16.过滤器:     (1) OutputCacheAttribute类实现的主要功能是借用ASP.NET 2.0中的页缓存机制,实现asp.net 3.5 mvc 网站中的页面缓存,从而提高网站的性能。         如:             [OutputCache(Duration=10,VaryByParam="non"]             public ActionResult OutputCache()             {                 ViewData["Message"]="当前时间是:”+DateTime.Now.ToLongTimeString();                 return View();             }     (2) AuthroizeAttribute (此类中有两个属性:Users & Roles 分别表示成员的用户名和角色) 类实现的主要功能是,实现ASP.NET 3.5 MVC 网站中指定页面的成员和角色管理。         如:             [Authorize]             public ActionResult Authorize()             {                 ViewData["Message"]="该页面只有注册用户才能访问!";                 return View();             } 由于添加上了Authorize特性,而Authorize.aspx页面只有注册用户才可以访问,此时页面任何注册用户均可以登录访问,如果只想指定的用户才能访问,则可以设置如下:[Authorize(Users="test1,test2")],如果指定的用户太多,也可以通过设置角色来控制访问权限,如:[Authorize(Roles="Admin,Firends")]。     (3) HandleErrorAttribute 类 实现的主要功能是 实现asp.net 3.5 mvc 网站中指定控制器或者控制器中相关方法的异常处理。         [HandleError] 可以设置在控制器上,也可以设置在控制器中的方法上。如果出现异常,则会打开个性化的异常处理页面。

    最新回复(0)