MVC进阶学习--个性化目录结构(二)

(一)  浅谈MVC目录结构

  在上一篇(《MVC进阶学习--个性化目录结构(一)》)中了解到了MVC 的基本目录结构,以及各个目录的作用。我们只是说到了表面的目录结构,没有了解到它运行的原理。是不是MVC的目录结构只能有那种固定的模式呢,我们能否根据自己的需要扩展这些目录结构呢。答案是肯定的。因为asp.net MVC中引用了WebFromViewEngine 这个视图引擎

(二) WebFormViewEngine视图引擎

  1.IView接口    IView接口是对MVC结构中View对象的抽象, 此接口只有一个方法:

    void Render(ViewContext viewContext, TextWriter writer);  Render方法的作用就是展示View对象,

    通常是将页面HTML写入到Writer中供浏览器展示.

  

  2.IViewEngine接口  MVC中ViewEngine的抽象,该接口有两个方法:

     ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache)

    ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)

    该方法的作用就是寻找视图对象,值得注意的是上面两个方法返回的都不是ViewPage 页面对象,而是ViewEngineResult 对象。我们可以将ViewEngineResult理解为一次查询的结果, 在ViewEngineResult对象中包含有本次找到的IView对象.  这句话我也不是太懂,看很多相关资料是这样写的,我也姑且这样写吧

 

  3.IViewEngine 的实现类

   IViewEngine有两个实现类。 WebFormViewEngine :VirtualPathProviderViewEngine:IViewEngine  这个是它们的关系。而MVC中的试图引擎就是使用的WebFormViewEngine。 WebFormViewEngine包括了三个属性:

  MasterLocationFormats  可以个性化母版页的路径

  ViewLocationFormats     可以个性化试图页面的路径

  PartialViewLocationFormats   可以个性化用户控件的路径

  

  4.在Global.asax 中注册个性化路径

    

Code
 1         protected void Application_Start()
 2         {
 3             ViewEngines.Engines.Clear();
 4 
 5             ViewEngines.Engines.Add(new WebFormViewEngine()
 6             {
 7                 ViewLocationFormats = new string[] { 
 8                 "~/{0}.aspx",
 9                 "~/{0}.ascx",
10                 "~/Views/{1}/{0}.aspx",
11                 "~/Views/{1}/{0}.ascx",
12                 "~/Views/Shared/{0}.aspx",
13                 "~/Views/Shared/{0}.ascx"
14             }
15             });
16         }

 

时间: 2024-09-15 17:27:20

MVC进阶学习--个性化目录结构(二)的相关文章

MVC进阶学习--个性化目录结构(一)

(一) 简单MVC目录结构分析 以上是一个再简单不过的MVC目录结构了,这也是微软MVC解决方案的基础目录结构,在我们一般的MVC开发项目中,基本上就是套用了这种格式.我们不需要去自己去定义一个目录,因为微软已经帮我们定义好了.我们只需要在原有的基础上添加和修改. Content 文件夹,内容文件夹,姑且这样理解,我们主要存放样式文件,图片文件,xml文件以及其他的一些资源文件.这个没有太多的介绍.当然我们不一定要放到这个里面去,也可以自己定义一个文件夹.不过我个人还是趋向于放在这个里面,毕竟是

MVC进阶学习--个性化目录结构(三)

(一) 目录结构 看到上面的目录结构 会有耳目一新的感觉,终于突破了原有的MVC目录结构.该目录结构除了使用原有的Controllers 文件夹之外,我们还使用了Games自定义文件夹中的Controllers.在Users文件夹中也同样还有一个Controllers文件夹,这些文件夹都是存放控制器类的.我们可以根据自己的需要建立不同的Controller 组. 在大型项目开发的过程中,模块的数量可能会很多,仅仅只靠原有的目录结构是不能满足我们的要求的,而且扩展性也不是太好,因为思想就被束缚在它

MVC进阶学习--HtmlHelper之GridView控件拓展(五)

1.GridView使用Action代码   Code 1 public ActionResult Index() 2         { 3             CommonPage page = TempData["page"] as CommonPage; 4             if (page == null) 5             { 6                 page = new CommonPage(); 7             } 8   

MVC进阶学习--View和Controller之间的数据传递(二)

1. 使用Request.Form MVC 将页面简单化,与WebForm中的事件机制完全不同,就和普通的html标签表单提交没有任何区别(当然WebForm中的事件机制其实也是表单提交).在表单提交之后,在Controller action中可以以Request.Form["key"] 的方式获取到值. Code1 <%Html.BeginForm("Index", "Home", FormMethod.Post); %>2   &

MVC进阶学习--HtmlHelper之GridView控件拓展(二)

1.目录结构图       2.自定义集合类 Codeusing System;using System.Collections.Generic;using System.Linq;using System.Web; namespace MvcTest.Code{    public class PageList<T> : List<T>    {        private CommonPage _page;         public CommonPage Page    

MVC进阶学习--HtmlHelper控件解析(二)

1.InputExtensions类      InputExtensions类主要有5种类型的扩展方法,分别用于CheckBox控件,Hidden控件,Pass控件,RadionButton控件,TextBox控件 2.CheckBox控件      有如下重载方法:      CheckBox(string name);      CheckBox(string name,bool isChecked);      CheckBox(string name,book isChecked,ob

MVC进阶学习--HtmlHelper控件解析(四)

1.RenderPartialExtensions类      RenderPartialExtensions类主要扩展了一个方法 RenderPartial()      RenderPartial(string partialViewName);      RenderPartial(string partialViewName,ViewDataDictionary viewData);      RenderPartial(string partialViewName,object mod

MVC进阶学习--View和Controller之间的数据传递(一)

1.使用ViewData ViewData 的是ControllerBase 的一个属性,是一个数据字典类型的,其实现代码如(这段代码来自asp.net MVC开源项目中源码)下: Code  1 public class ViewDataDictionary : IDictionary<string, object> {  2   3         private readonly Dictionary<string, object> _innerDictionary = ne

MVC进阶学习--HtmlHelper控件解析(一)

1.HtmlHelper类      HtmlHelper类位于System.Web.MVC.Html命名空间下.主要包括FormExtensions,InputExtensions,LinkExtensions,SelectExtensions,TextAreaExtensions,ValidationExtensions,RenderPartialExtensions等7个静态内,他们全部是是采用拓展方法来实现的      在asp.net MVC中ViewPage中使用的属性如下: