中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET MVC 視圖(一)

發布時間:2020-07-02 19:51:32 來源:網絡 閱讀:987 作者:jinyuan0829 欄目:編程語言

ASP.NET MVC 視圖()

前言

從本篇開始就進入到了MVC中的視圖部分,在前面的一些篇幅中或多或少的對視圖和視圖中的一些對象的運用進行了描述,不過畢竟不是視圖篇幅說的不全面,本篇首先為大家講解一下自定義視圖引擎的定義和使用,由此慢慢的來了解視圖引擎以及視圖模塊的工作過程。

ASP.NETMVC 視圖

l 自定義視圖引擎簡易示例

l Razor視圖引擎執行過程

l  Razor視圖的依賴注入、自定義視圖輔助器

l  分段、分部視圖的使用

l  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()方法中第一個參數是控制器上下文類型,里面包含著ViewDataViewBag一些信息等,第二個字符串類型的參數表示為分部視圖的名稱,第三個參數是布爾值類型的參數表示是否緩存當前信息。


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

ASP.NET MVC 視圖(一)

大概流程是這樣的,首先在我們控制器方法返回ViewResult的時候,ViewResult會從系統的IViewEngine集合中中讀取IViewEngine,并且執行每個IViewEngineFindView【假使是視圖】,執行中某一個IViewEngine有返回ViewEngineResult類型的話則會停下向下執行,而是執行ViewEngineResult類型中的IViewRender()方法。最后視圖的呈現則不是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

ASP.NET MVC 視圖(一)

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲阳县| 司法| 芷江| 乡宁县| 荃湾区| 高安市| 姜堰市| 洛扎县| 茌平县| 丁青县| 北辰区| 建湖县| 兴仁县| 凤城市| 龙口市| 高唐县| 进贤县| 成武县| 禹城市| 兴义市| 金堂县| 当阳市| 慈利县| 永春县| 丽水市| 融水| 汕头市| 招远市| 孝义市| 深水埗区| 衡南县| 通榆县| 陵川县| 上思县| 砀山县| 合水县| 界首市| 北流市| 会宁县| 汨罗市| 永德县|