ASP.NET MVC 视图(一)

ASP.NET MVC 视图(一)

前言

从本篇开始就进入到了MVC中的视图部分,在前面的一些篇幅中或多或少的对视图和视图中的一些对象的运用进行了描述,不过毕竟不是视图篇幅说的不全面,本篇首先为大家讲解一下自定义视图引擎的定义和使用,由此慢慢的来了解视图引擎以及视图模块的工作过程。

ASP.NETMVC 视图

自定义视图引擎简易示例

Razor视图引擎执行过程

Razor视图的依赖注入、自定义视图辅助器

分段、分部视图的使用

Razor语法、视图辅助器

自定义视图引擎

在讲解自定义视图引擎之前,我们先来了解一下其中涉及到的一些对象类型。

首先来看IViewEngine接口类型的定义:

代码1-1

public interface IViewEngine
    {
        ViewEngineResultFindPartialView(ControllerContextcontrollerContext, string partialViewName, bool useCache);
        ViewEngineResultFindView(ControllerContextcontrollerContext, string viewName, string masterName, booluseCache);
        voidReleaseView(ControllerContextcontrollerContext, IView view);
    }

在代码1-1中我们可以看到IViewEngine接口类型中定义了三个方法,第一个FindPartialView()方法中第一个参数是控制器上下文类型,里面包含着ViewData、ViewBag一些信息等,第二个字符串类型的参数表示为分部视图的名称,第三个参数是布尔值类型的参数表示是否缓存当前信息。

FindView()方法和FindPartialView()方法相似,只是多了一个viewName参数,表示视图名称。

这里实际的实现都是根据不同的视图引擎类型在这两个方法中返回对应视图引擎类型的IView【视图处理类型】,这个部分内容会在一下个篇幅中讲解到。

ReleaseView()方法则是用来释放IView中处理视图的资源。

ViewEngineResult类型是封装着IViewEngine类型和IView类型的一个操作返回类型,上面的两个方法的返回类型都是ViewEngineResult类型。

代码1-2

public class ViewEngineResult
{
        publicViewEngineResult(IEnumerable<string> searchedLocations);
        publicViewEngineResult(IView view, IViewEngine viewEngine);
 
        public IEnumerable<string>SearchedLocations { get; }
        public IView View { get;}
        public IViewEngine ViewEngine { get;}
    }

在代码1-2中我们可以看到ViewEngineResult类型的两个构造函数,第一个可枚举字符串类型表示的是搜索视图位置地址的这么一个集合,第二个不用说了就是对象封装了。

我们再来看一下IView的定义:

代码1-3

public interface IView
    {
        // 摘要:
        //     使用指定的编写器对象来呈现指定的视图上下文。
        //
        // 参数:
        //   viewContext:
        //     视图上下文。
        //
        //   writer:
        //     编写器对象。
        voidRender(ViewContext viewContext, TextWriter writer);
    }

IView类型的在我的理解就是视图处理类型,它只是代表着一种类型的视图,比如说Razor视图是cshtml格式的文件,对应的IView就是RazorView这个处理类型,这个下篇会讲到。

先来看一下下面所要讲解的示例的示意图:

图1

大概流程是这样的,首先在我们控制器方法返回ViewResult的时候,ViewResult会从系统的IViewEngine集合中中读取IViewEngine,并且执行每个IViewEngine的FindView【假使是视图】,执行中某一个IViewEngine有返回ViewEngineResult类型的话则会停下向下执行,而是执行ViewEngineResult类型中的IView的Render()方法。最后视图的呈现则不是MVC部分负责的了下一篇中会讲解。现在我们来看一下示例。

首先是自定义的IViewEngine:

代码1-4

using System.Web.Mvc;
using MvcApplication.CustomView;
 
namespace MvcApplication.CustomViewEngine
{
    public class MyCustomViewEngine: IViewEngine
    {
 
        public ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, booluseCache)
        {
            returnnew ViewEngineResult(new string[] { "MyCustomView " });
        }
 
        public ViewEngineResult FindView(ControllerContextcontrollerContext, string viewName, string masterName, booluseCache)
        {
            if(viewName == "MyCustomView")
            {
                returnnew ViewEngineResult(new MyCustomView(),this);
            }
            else
            {
                returnnew ViewEngineResult(new string[] { "MyCustomView " });
            }
 
        }
 
        public void ReleaseView(ControllerContextcontrollerContext, IView view)
        {
 
        }
    }
}

这里只是在FindView()方法中实现了一个基础的代码,如果是视图名称为"MyCustomView",则会返回MyCustomView类型的视图处理类型作为ViewEngineResult类型的构造函数参数来返回。

自定义的IView:

代码1-5

using System.Web.Mvc;
 
namespace MvcApplication.CustomView
{
    public class MyCustomView:IView
    {
        public void Render(ViewContextviewContext, System.IO.TextWriter writer)
        {
            foreach(string key inviewContext.ViewData.Keys)
            {
                writer.Write("Key:" + key + ",Value:"+ viewContext.ViewData[key] + ".<p/>");
            }
        }
    }
}

代码1-5中的定义则是简单的向writer中写入ViewData的值,并且最后呈现在视图页面上。

最后我们要把自定义的视图引擎添加到系统的视图引擎集合中,在Global.asax文件的Application_Start()方法中。

代码1-6

ViewEngines.Engines.Insert(0, newCustomViewEngine.MyCustomViewEngine());

这种添加的方式不多说了,前面篇幅对于这种模式的已经说过了,让自定义的排在集合的第一位而已。

最后随意的在某个控制器方法中代码修改为如下代码:

代码1-7

public ActionResultCustomView()
        {
            this.ViewData.Add("DebugData", "Jinyuan");
            this.ViewData.Add("DebugDate", "2014-01-01");         
            returnView("MyCustomView");
        }

图2

时间: 2024-10-04 13:18:06

ASP.NET MVC 视图(一)的相关文章

ASP.NET MVC 视图(五)

ASP.NET MVC 视图(五) 前言 上篇讲解了视图中的分段概念.和分部视图的使用,本篇将会对Razor的基础语法简洁的说明一下,前面的很多篇幅中都有涉及到视图的调用,其中用了很多视图辅助器,也就是相当于传统webform中的服务器控件,它们都是给我们带来方便的.都是用于生成Html代码的. ASP.NETMVC 视图 l  自定义视图引擎 l Razor视图引擎执行过程 l  Razor视图的依赖注入.自定义视图辅助器 l  分段.分部视图的使用 l  Razor语法.视图辅助器 Razo

ASP.NET MVC 视图(二)

ASP.NET MVC 视图(二) 前言 上篇中对于视图引擎只是做了简单的演示,对于真正的理解视图引擎的工作过程可能还有点模糊,本篇将会对由MVC框架提供给我们的Razor视图引擎的整个执行过程做一个粗略的讲解,目的在于让大家对Razor视图引擎的执行过程留个印象以便联想的思考到视图引擎的作用以及视图在MVC框架中的表示. ASP.NET MVC 视图 自定义视图引擎 Razor视图引擎执行过程 Razor视图的依赖注入.自定义视图辅助器 分段.分部视图的使用 Razor语法.视图辅助器 Raz

ASP.NET MVC 视图(三)

ASP.NET MVC 视图(三) 前言 上篇对于Razor视图引擎和视图的类型做了大概的讲解,想必大家对视图的本身也有所了解,本篇将利用IoC框架对视图的实现进行依赖注入,在此过程过会让大家更了解的视图,最后还会简单的介绍一下自定义的视图辅助器是怎么定义和使用的. ASP.NET MVC 视图 l  自定义视图引擎 l Razor视图引擎执行过程 l Razor视图的依赖注入.自定义视图辅助器 l  分段.分部视图的使用 l  Razor语法.视图辅助器   Razor视图的依赖注入 首先我们

ASP.NET MVC 视图(四)

ASP.NET MVC 视图(四) 前言 上篇对于利用IoC框架对视图的实现进行依赖注入,最后还简单的介绍一下自定义的视图辅助器是怎么定义和使用的,对于Razor语法的细节和辅助器的使用下篇会说讲到,本篇来讲解一下视图中的分段概念.和分部视图的使用. ASP.NET MVC 视图 自定义视图引擎 Razor视图引擎执行过程 Razor视图的依赖注入.自定义视图辅助器 分段.分部视图的使用 Razor语法.视图辅助器 分段.分部视图的使用 分段的使用 在ASP.NET MVC框架的Razor引擎中

(转)Asp.Net Mvc视图引擎Razor介绍

Asp.Net Mvc视图引擎Razor介绍 1.Razor介绍 程序园原创,转载请注明:http://www.kwstu.com/ArticleView/dabaomvc_201408240820545275 1)ASP.NET MVC3 带来了一种新的名为Razor 的视图引擎,提供了下列优点: Razor 的语法简单且清晰,只需要最小化的输入 Razor 容易学习,语法类似于 C# 和 VB Visual Studio 对于 Razor 提供了智能提示和语法着色 Razor 视图不需要允许

为ASP.NET MVC视图输出json

做个小小练习,为asp.net mvc视图输出json字符串: 创建JsonResult操作: 创建此视图: 浏览结果:

Asp.net MVC 视图引擎

Asp.net MVC视图引擎有两种: 1.ASPX View Engine 这个做过WebForm的人都清楚 设计目标:一个用于呈现Web Form页面的输出的视图引擎. 2.Razor View 在Asp.net MVC 3 版本引入的, 可以支持UnitTest,也容易上手. Razor在减少代码冗余.增强代码可读性和vs 智能感知方面,都有着很大的优势. 下面主要讨论下视图引擎 ActionResult 讲到视图引擎,不得不说ActionResult,因为在Controller中,我们看

Asp.net MVC 视图之公用代码

一.公共模板 1.@RenderBody() 在网站公用部分通过一个占位符@RenderBody()来为网站独立部分预留一个位置.然后私有页面顶部通过@{Layout="公用模板路径"}来引入公用模板,并在自身放到公用模板的位置.同时也可以设置ViewData或ViewBag设置网站标题,关键词等信息. @{ Layout = "~/Views/Shared/_Layout.cshtml"; ViewBag.Title = "从这里可以设置网站标题&quo

Asp.net MVC 视图(三)

Html辅助方法(HtmlHelper类) 可以通过视图的Html属性调用HTML辅助方法,也可以通过Url属性调用URL辅助方法,还可以通过Ajax属性调用Ajax辅助方法. 在控制器中也存在Url辅助方法. 所有输出模型值和特性值的辅助方法都会在渲染之前,对值进行HTML编码.例如:< 转义为 < 等. Html辅助方法的工作原理 每个Razor视图都继承了基类的Html属性,Html属性的类型是System.Web.Mvc.HtmlHelper<T>,T代表传递给视图的模型类