瞭解視圖
ASP.NET MVC與ASP.NET或動態伺服器頁(ASP)不同,它並沒有任何直接對應於一個頁面的東西。在ASP.NET MVC應用程式中,磁碟上並沒有一個頁面來對應你在瀏覽器網址列中輸入的URL路徑。在ASP.NET MVC應用程式中,最接近頁面的東西是稱為視圖(View)的東西。
在ASP.NET MVC應用程式中,即將到達的瀏覽器請求被對應到了控制器動作。一個控制器動作可能會傳回一個視圖。然而,一個控制器動作可能會執行某種類型的操作,例如將你重定向到另一個控制器動作。
程式碼清單1含有一個簡單的控制器,叫做HomeController.HomeController暴露出了兩個控制器動作,稱為指數()和詳細資料()。
代码清单1 - HomeController.cs 使用系统; 使用 System.Collections.Generic; 使用 System.Linq; 使用 System.Web; 使用 System.Web.Mvc; 命名空间 MvcApp.Controllers{ [HandleError] public class HomeController:Controller { public ActionResult Index() { return View(); } public ActionResult Details() { return RedirectToAction( “Index”); } }}
你可以透過在瀏覽器的網址列輸入下面的URL,呼叫第一個動作,指數()動作:
/首頁/索引
你可以透過在瀏覽器中輸入這個位址,來呼叫第二個動作,細節()動作:
/主頁/細節
指數()動作傳回一個視圖。你所創建的大多數動作都會傳回一個視圖,然而,動作可以傳回任何類型的動作結果。例如,詳細資訊()動作傳回了一個RedirectToActionResult,它可以將即將到達的請求重定向到指數()動作。
指數()動作包含了下面一行程式碼:
return View();
這行的程式碼回傳了一個視圖,該視圖在伺服器上的路徑必須和下面的路徑一樣:
\查看\首頁\的Index.aspx
視圖的路徑由控制器和控制器動作的名稱推斷。
如果你願意,可以明確地指明視圖下面一行程式碼回傳了一個視圖,名為「弗雷德」:
返回視圖(「Fred」);
當執行這行程式碼時,將會從下面的路徑返回一個視圖:
\檢視\首頁\ Fred.aspx
2.建立一個視圖
你可以在解決方案瀏覽器中的資料夾上點擊右鍵,並選擇選單項目“Add(新增)”,“新建專案”(如圖1)。選擇「MVC View Page」範本將標準視圖新增到你的專案中。
應該要意識到你不能像ASP.NET或ASP應用程式中那樣,隨意在專案中加入視圖。你必須將視圖新增到資料夾中,而該資料夾的名稱與控制器的名稱相同(不含控制器後綴)舉個例子,如果你想建立一個新的,叫做索引的視圖,該視圖可以由名為ProductController的的控制器返回,那麼你必須添加這個視圖到專案的如下資料夾中:
#\查看\產品\ Index.aspx的
#含有視圖的資料夾的名稱必須與傳回該視圖的控制器的名稱相對應。
3.在檢視中新增內容
一個檢視是一個標準的,可以包含腳本的(X)HTML文件。你使用腳本來向視圖中添加動態內容。
舉個例子,程式碼清單2中的檢視顯示了目前的日期和時間。
程式碼清單2 - \ Views \ Home \ Index.aspx
<%@ Page Language =“C#”AutoEventWireup =“true”CodeBehind =“Index.aspx.cs”Inherits =“MvcApp.Views.Home.Index”%> <!DOCTYPE html PUBLIC“ - // W3C // DTD XHTML 1.0 Transitional // EN“”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“> <头RUNAT = “服务器”>索引 TITLE> HEAD> 的当前日期和时间是: <%回复于(DateTime.Now);%> DIV> body> html>注意到程式碼清單2中的HTML頁面的身體中含有下面的腳本:
<%Response.Write(DateTime.Now);%>使用腳本分隔符號來標記腳本的開始和結束。這個腳本使用C#編寫。它顯示了當前的日期和時間,透過呼叫回覆於()方法將內容呈現到了瀏覽器中腳本。分隔符號可以用來執行一條或多條語句。
因為經常會呼叫回覆()方法,微軟為你提供了一個呼叫回覆於()的簡單途徑。程式碼清單3中的視圖使用作為呼叫回復於()方法的簡單途徑。
程式碼清單3 - Views \ Home \ Index2.aspx
<%@ Page Language =“C#”AutoEventWireup =“true”CodeBehind =“Index2.aspx.cs”Inherits =“MvcApp.Views.Home.Index2”%> <!DOCTYPE html PUBLIC“ - // W3C // DTD XHTML 1.0 Transitional // EN“”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“> <头RUNAT = “服务器”>索引2 TITLE> HEAD> 的当前日期和时间是: <%= DateTime.Now%> DIV> BODY> < / HTML>你可以用任何的.NET語言在檢視中產生動態內容,可以使用Visual Basic.Net或C#來寫你的控制器和視圖。
4.使用HTML Helpers來產生視圖內容
为了使向视图中添加内容更加容易一些,你可以利用叫做HTML Helper的东西.HTML Helper是一个生成字符串的方法。你可以使用HTML帮助者来生成标准的HTML元素,例如文本框,链接,下拉框和列表框。
举个例子,代码清单4中的视图利用了两个HTML Helpers,TextBox()和Password(),用于生成一个登录窗体(见图2)。
代码清单4 - \ Views \ Home \ Index3.aspx
<%@ Page Language =“C#”AutoEventWireup =“true”CodeBehind =“Index3.aspx.cs”Inherits =“MvcApp.Views.Home.Index3”%> <!DOCTYPE html PUBLIC“ - // W3C // DTD XHTML 1.0 Transitional // EN“”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>登录表单 title> head>