码迷,mamicode.com
首页 > 其他好文 > 详细

第18 章 视图

时间:2015-07-19 11:46:01      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

 

  1.IView接口

  2.IViewEngine接口

    ViewEngineResult

  3.注册视图引擎  

            //清除视图引擎
            ViewEngines.Engines.Clear();
            //添加视图引擎
            ViewEngines.Engines.Add(new DebugDataViewEngine());
            //或  添加视图引擎(顺序)
            ViewEngines.Engines.Insert(0,new DebugDataViewEngine());

 

    MVC框架对视图引擎的支持是由ControllerActionInvoker类实现的,是IActionInvoker接口的内建实现。当

  当直接通过IActionInvoker或IControllerFactory接口实现自己的动作调用器或控制器工厂,将无法自动地访问视图引擎特性。

一、使用Razor视图引擎

  Razor视图引擎会编译应用程序的视图,以改善性能。视图会被转换成C#类,然后被编译,这是在视图中能方便包含C#代码片段的原因。

  1.配置视图搜索位置

Razor视图引擎搜索属性

属性 描述 默认值

ViewLocationFormats

MasterLocationFormats

PartialViewLocationFormats

查找视图、分部视图,以及布局的位置
"~/Views/{1}/{0}.cshtml",
"~/Views/{1}/{0}.vbhtml",
"~/Views/Shared/{0}.cshtml", 
"~/Views/Shared/{0}.vbhtml"

AreaViewLocationFormats

AreaMasterLocationFormats

AreaPartialViewLocationFormats

为一个区域查找视图、分部视图,以及布局的位置
"~/Areas/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Views/{1}/{0}.vbhtml",
"~/Areas/{2}/Views/Shared/{0}.cshtml",
"~/Areas/{2}/Views/Shared/{0}.vbhtml"

    点位符对应的参数值:

      {0} 表示视图名

      {1} 表示控制器名

      {2} 表示区域名

   创建RazorViewEngine类的派生类,修改属性值,来改变搜索位置。(要重新注册视图引擎)

 public class CustomLocationViewEngine : RazorViewEngine
    {
        public CustomLocationViewEngine()
        {
            ViewLocationFormats = new string[]
            {
                "~/Views/{1}/{0}.cshtml",

                "~/Views/Common/{0}.cshtml"
            };
        }
    }

 

       protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            ViewEngines.Engines.Clear();
            ViewEngines.Engines.Add(new CustomLocationViewEngine());

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

   2.添加动态内容

添加动态内容的方式

技术 何时使用
内联代码 用于小型的、自包含视图逻辑的片段,如if或foreach语句。这是创建动态内容的基本身段,也是一些其他方法的基础。
HTML辅助器方法 用于生成一个独立的HTML元素或小片段集合,典型地是基于视图模型或视图数据的值。MVC包含了许多有用的HTML辅助器方法,而且创建自己的辅助器方法方法也很容易。
分段 用于创建内容分段,这种分段用于插入到布局的特定位置
分部视图 用于在视图之间共享的子片段标记。分部视图也可以含有内联代码、HTML辅助器方法,以及引用其他分部视图。分部视图不调用动作方法,因此它们不能用来执行事务逻辑
子动作 用于创建可重用的UI控件,或需要含有事务逻辑的小部件。当使用子动作时,它调用一个动作方法,返回 一个视图,并把结果注入到响应流中

    1.分段(Section):提供一个布局的内容区域。将视图的某一部分插入到布局中哪个位置去。

      在Razor对布局进行解析时,RenderSection辅助器方法会显示视图中指定名称的分段内容。视图中未包含的分段内容,会插入到布局中使用RenderBody辅助器的地方。

    注:一个视图只能定义布局中被引用的分段。如果尝试在视图中定义布局中没有对应@RenderSection辅助器调用的分段,会抛出异常。

    (1)布局(_Layout.cshtml)中判断视图中是否定义了分段:       

      @if (IsSectionDefined("Header"))
      {
          @RenderSection("Header")
      }
      else
      {
          <h4>默认头部内容</h4>
      }

    (2)可选分段: @RenderSection("script",false)

    2.分部视图(Section):应用程序中多个不同的地方使用同样的Razor标签和HTML标记片段。

       分部视图在布局中渲染内容。

        分部视图StrongPartial.cshtml

        @model IEnumerable<string>
       <div>
             这里的信息来自于分部视图
           <ul>
               @foreach (string str in Model)
               {
                   <li> @str</li>
               }
           </ul>
       </div>    

      使用分部视图:在List.html

        @{
        ViewBag.Title = "List";
        Layout = null;
        }

        <h2>这是在/View/Common/下的list</h2>

        @*@Html.Partial("MyPartial")*@
        @Html.Partial("StrongPartial",new[]
        {
            "Apple","orange","pear"
        })
                                                                                        

     3.子动作(Child Action):通过视图调用的动作方法。某个控制器逻辑用于应用程序的多个地方。

       (1)定义子动作方法: 

        [ChildActionOnly]
        public ActionResult Time(DateTime time)
        {
            return PartialView(time);
        }

        添加子动作视图:

        @model DateTime
          <p>
          现在时间:@Model.ToShortTimeString()
          </p>

             (2)渲染子动作: 

        @Html.Action("Time","Home",new{time=DateTime.Now)

   

第18 章 视图

标签:

原文地址:http://www.cnblogs.com/wjs5943283/p/4658110.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!