MVC 学习笔记一

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春哥撩编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值