鍍金池/ 教程/ Java/ MVC框架 - 視圖
MVC框架 - 異常處理
MVC框架架構(gòu)
MVC框架 ASP.NET表單
MVC框架 - 高級(jí)示例
MVC框架 - 捆綁
MVC框架 - 文件夾
MVC框架 - 控制器
MVC框架 - 模型
MVC框架 - 視圖
MVC框架 - 路由引擎
MVC框架 - 第一個(gè)應(yīng)用程序
MVC框架 - AJAX支持
MVC框架教程
MVC框架 - 布局
MVC框架 - 動(dòng)作過(guò)濾器

MVC框架 - 視圖

正如在最初的介紹章節(jié),視圖涉及應(yīng)用程序的用戶界面組件。 這些視圖一般都從模型數(shù)據(jù)結(jié)合并有一個(gè)像HTML,ASPX,CSHTML,vbhtml等擴(kuò)展。 在我們的第一個(gè)MVC應(yīng)用程序,我們已經(jīng)使用控制器視圖來(lái)顯示數(shù)據(jù)給最終用戶。對(duì)于這些渲染靜態(tài)和動(dòng)態(tài)內(nèi)容到瀏覽器,MVC框架使用視圖引擎。視圖引擎基本上標(biāo)記語(yǔ)法的實(shí)現(xiàn),它負(fù)責(zé)呈現(xiàn)到最終的HTML瀏覽器。

MVC框架帶有兩個(gè)內(nèi)置的視圖引擎:

1. Razor 引擎: Razor 是一種標(biāo)記語(yǔ)法,使用服務(wù)器端的C#或VB代碼到網(wǎng)頁(yè)中。這個(gè)服務(wù)器端代碼可以使用加載網(wǎng)頁(yè)創(chuàng)建動(dòng)態(tài)內(nèi)容。 Razor是一種先進(jìn)的引擎相比于ASPX引擎,并在以后的MVC版本中推出。

2. ASPX 引擎: ASPX或Web窗體引擎是從一開(kāi)始列入MVC框架的默認(rèn)視圖引擎。用這個(gè)引擎編寫代碼非常類似于使用ASP.NET Web窗體編寫代碼。

以下是比較Razor和ASPX引擎小型代碼片段。

Razor:

@Html.ActionLink("Create New", "UserAdd")
ASPX:
<% Html.ActionLink("SignUp", "SignUp") %>

Razor是比較先進(jìn)的視圖引擎,因?yàn)樗鼛в泻?jiǎn)潔的語(yǔ)法,測(cè)試驅(qū)動(dòng)的開(kāi)發(fā)方法,以及更好的安全特性。 我們將使用Razor引擎在我們的所有例子中,因?yàn)樗且晥D最主要使用的引擎。

這些視圖引擎可以被編碼并實(shí)現(xiàn)在以下兩種類型:

  • 強(qiáng)類型
  • 動(dòng)態(tài)類型

這些方法類似于早期綁定和后期綁定,分別在模型綁定到視圖強(qiáng)類型或動(dòng)態(tài)類型。

強(qiáng)類型視圖

為了理解這個(gè)概念,讓我們創(chuàng)建一個(gè)示例MVC應(yīng)用程序(按照前面章節(jié)中的步驟),并添加一個(gè)名為ViewDemoController控制器類文件:

new_view_controller

現(xiàn)在復(fù)制器文件中的以下代碼:

using System.Collections.Generic;
using System.Web.Mvc;

namespace ViewsInMVC.Controllers
{
    public class ViewDemoController : Controller
    {
        public class Blog
        {
            public string Name;
            public string URL;
        }

        private readonly List topBlogs = new List
        {
            new Blog { Name = "Joe Delage", URL = "http://yiibai/joe/"},
            new Blog {Name = "Mark Dsouza", URL = "http://yiibai/mark"},
            new Blog {Name = "Michael Shawn", URL = "http://yiibai/michael"}
        };

        public ActionResult StonglyTypedIndex()
        {
            return View(topBlogs);
        }

        public ActionResult IndexNotStonglyTyped()
        {
            return View(topBlogs);
        }  
    }
}
    

在上面的代碼中,我們定義了兩個(gè)動(dòng)作方法:StronglyTypedIndex和IndexNotStonglyTyped。現(xiàn)在對(duì)這些動(dòng)作的方法添加視圖。

右鍵單擊StonglyTypedIndex操作方法,然后單擊添加視圖。在接下來(lái)的窗口中,選擇“創(chuàng)建一個(gè)強(qiáng)類型視圖”復(fù)選框。 這也將使模型類和腳手架模板選項(xiàng)。從腳手架模板選項(xiàng)選擇列表。單擊添加。

add_view_strongly_type

類似下面的截圖,視圖文件將被創(chuàng)建??梢宰⒁獾剑陧敳康腣iewDemoController已經(jīng)包括Blog模型類。還可以使用智能提示在代碼中使用這種方法。

view_strongly_type_intellisense

動(dòng)態(tài)類型的視圖:

創(chuàng)建動(dòng)態(tài)類型的視圖,右鍵點(diǎn)擊IndexNotStonglyTyped操作,然后單擊添加視圖。

add_view

這個(gè)時(shí)候不要選擇“創(chuàng)建一個(gè)強(qiáng)類型視圖”復(fù)選框。

view_index_not_strongly_type

所得視圖有以下代碼:

@model dynamic
           
@{
    ViewBag.Title = "IndexNotStonglyTyped";
}

<h2>Index Not Stongly Typed</h2>

<p>
 <ul>
@foreach (var blog in Model) {
   <li>
    <a href="@blog.URL">@blog.Name</a>
   </li>   
}
 </ul>
</p>

正如在上面的代碼中看到,這一次它沒(méi)有添加的Blog模型。 此外,在這個(gè)時(shí)間將無(wú)法使用智能提示,因?yàn)檫@個(gè)時(shí)候的結(jié)合將在運(yùn)行時(shí)進(jìn)行。

強(qiáng)類型的視圖被認(rèn)為是一個(gè)更好的辦法,因?yàn)槲覀円呀?jīng)知道什么數(shù)據(jù)被傳遞模型使用動(dòng)態(tài)類型的視圖中的數(shù)據(jù)綁定獲取在運(yùn)行時(shí),如果有新的變化鏈接模型中可能導(dǎo)致運(yùn)行錯(cuò)誤。