在典型的 Web 應(yīng)用中,用戶請(qǐng)求的 URL 地址通常映射到保存在網(wǎng)站中的文件上,例如,當(dāng)用戶請(qǐng)求 /Products.aspx 的時(shí)候,或者 /Products.php 的時(shí)候,很可能是在通過(guò)處理 Products.aspx 或者 Products.php 文件來(lái)完成任務(wù)。
為墨脫等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及墨脫網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、墨脫網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!ASP.NET MVC 的處理方式則不同,它沒(méi)有映射到文件上,相反,將這些 URL 地址映射到類的方法上,這些類被稱為“控制器”,控制器用來(lái)接受 HTTP 請(qǐng)求,處理用戶的輸入,獲取或者保存數(shù)據(jù),其中的處理方法稱為 Action,然后將回應(yīng)發(fā)送到客戶端,可能是顯示了一個(gè) HTML 的網(wǎng)頁(yè),下載一個(gè)文件,重定向到另外一個(gè)地址等等。
在新創(chuàng)建的項(xiàng)目中,打開(kāi) Global.asax.cs 文件,可以看到如下的代碼。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcMusicStore
{
// 注意: 有關(guān)啟用 IIS6 或 IIS7 經(jīng)典模式的說(shuō)明,
// 請(qǐng)?jiān)L問(wèn)http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名稱
"{controller}/{action}/{id}", // 帶有參數(shù)的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數(shù)默認(rèn)值
);
}
// 一般用來(lái)進(jìn)行網(wǎng)站的初始化
protected void Application_Start()
{
System.Data.Entity.Database.SetInitializer(new MvcMusicStore.Models.SampleData());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
}
其中 RegisterRoutes 方法注冊(cè)了默認(rèn)的路由配置,在方法中的 routes.MapRoute 語(yǔ)句中,請(qǐng)求地址將會(huì)被看成三個(gè)部分組成,{controller}/{action}/{id},第一部分稱為控制器,如果沒(méi)有提供的話,默認(rèn)為 Home, 第二部分稱為 Action 方法,如果沒(méi)有提供的話,默認(rèn)為 Index, 第三部分稱為 id, 通常用來(lái)提供數(shù)據(jù)的標(biāo)識(shí),沒(méi)有默認(rèn)值。這樣,當(dāng)請(qǐng)求 / 地址的時(shí)候,系統(tǒng)將會(huì)把請(qǐng)求映射到名為 Home 的控制器進(jìn)行處理,調(diào)用其中名為 Index 的方法處理請(qǐng)求。
我們的應(yīng)用商店從增加一個(gè)首頁(yè)的控制器開(kāi)始,使用默認(rèn)的命名約定,控制器的名稱應(yīng)該以 Controller 作為后綴,我們將這個(gè)控制器命名為 HomeController。
在 Controller 文件夾上右擊,然后選擇“添加”,“控制器(T)…”
在彈出的對(duì)話框中,輸入控制器的名字 HomeController,按下“添加”按鈕。
這樣,將會(huì)創(chuàng)建一個(gè)名為 HomeController.cs 的文件,其中的代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcMusinStore.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
}
}
為了盡可能地簡(jiǎn)單,我們讓 Index 方法簡(jiǎn)單地返回一個(gè)字符串,這個(gè)字符串將作為回應(yīng)內(nèi)容直接返回瀏覽器,我們做下面的兩個(gè)簡(jiǎn)單修改。
這樣,我們的方法將會(huì)變成如下的內(nèi)容
public string Index()
{
return "Hello form Home";
}
現(xiàn)在,可以運(yùn)行一下了,我們可以啟動(dòng)服務(wù)器,使用下面的任何一種方法都可以。
使用上面的任何一種方法都會(huì)導(dǎo)致編譯項(xiàng)目,啟動(dòng) Visual Studio 中內(nèi)建的 ASP.NET 開(kāi)發(fā)服務(wù)器.
在屏幕的右下角會(huì)彈出一個(gè)啟動(dòng) ASP.NET 開(kāi)發(fā)服務(wù)器的提示,
Visual Studio 將自動(dòng)打開(kāi)一個(gè)瀏覽器窗口,其中的地址指向我們的 Web 服務(wù)器,這使得我們可以快速使用我們的程序。
Ok, 非常的簡(jiǎn)單,我們已經(jīng)創(chuàng)建了一個(gè) Web 站點(diǎn),寫了一個(gè)三行的函數(shù),在瀏覽器中得到了這行文字, 不是很震撼,但這僅僅只是開(kāi)始。
我們已經(jīng)為站點(diǎn)增加一個(gè)簡(jiǎn)單的 HomeController 作為首頁(yè),現(xiàn)在,增加另外一個(gè)控制器,可以用來(lái)瀏覽我們的音樂(lè)商店,我們的商店控制器將要支持三個(gè)場(chǎng)景:
我們從增加一個(gè)新的 StoreController 開(kāi)始,先停止剛才的程序,可以直接關(guān)閉瀏覽器,或者也可以在調(diào)試菜單中,選擇停止調(diào)試。
現(xiàn)在,增加一個(gè)新的 StoreController,像在 HomeController 中做的一樣,我們?cè)?Controllers 文件夾上右健,選擇“添加”,“控制器”.
新的 StoreController 控制器中已經(jīng)包含了 Index 方法,我們使用這個(gè)方法來(lái)實(shí)現(xiàn)列出所有分類的列表,我們還會(huì)再增加兩個(gè)額外的方法來(lái)實(shí)現(xiàn)其他的場(chǎng)景:瀏覽和明細(xì)。
這些包含在控制器中的方法,我們稱為控制器中的 Action,像你在前面看到的,HomeController 中的 Index 方法就是一個(gè) Action,這些 Action 的作用就是處理請(qǐng)求,然后返回對(duì)請(qǐng)求的處理結(jié)果。
對(duì)于我們的 StoreController ,首先讓 Index 這個(gè) Action 返回一個(gè)“Hello” 串,然后,增加兩個(gè)方法:Browse() 和 Detials()
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcMusinStore.Controllers
{
public class StoreController : Controller
{
//
// GET: /Store/
public string Index()
{
return "Hello from Store.Index()";
}
public string Browse()
{
return "Hello from Store.Browse()";
}
public string Details()
{
return "Hello from Store.Details()";
}
}
}
重新運(yùn)行程序,現(xiàn)在已經(jīng)可以訪問(wèn)這些地址了。
太棒了,但是現(xiàn)在僅僅能夠返回一些常量的字符串,讓我們將它們變成動(dòng)態(tài)的,我們從 URL 中獲取一些信息,然后把他們顯示在返回的頁(yè)面中。
首先,修改我們的 Browse 這個(gè) Action,使得它可以從 URL 地址中獲取查詢信息,為方法增加一個(gè)名為“genre” 的字符串類型參數(shù),當(dāng)我們這樣做的時(shí)候,ASP.NET MVC 就會(huì)自動(dòng)把任何名為 genre 的請(qǐng)求參數(shù)的值賦予這個(gè)參數(shù)。
//
// GET: /Store/Browse?genre=?Disco
public string Browse(string genre)
{
string message = HttpUtility.HtmlEncode("Store.Browse, Genre =" + genre);
return message;
}
注意:
我們使用了HttpUtility.HtmlEncode 方法來(lái)處理用戶的輸入,這樣可以防止用戶的腳本注入攻擊。例如:/Store/Browse?Genre=<script>window.location=’http://hackersite.com’</script>.
現(xiàn)在,我們?cè)跒g覽器中訪問(wèn)一下:/Store/Browse?Genre=Disco
下一步,我們處理 Details 這個(gè) Action,使它能夠處理名為 ID 的整數(shù)類型參數(shù)。這次,我們不再在請(qǐng)求參數(shù)中傳遞這個(gè)整數(shù),而是嵌在請(qǐng)求的 URL 地址中。例如:/Store/Details/5。
在 ASP.NET MVC 中,我們可以輕易地完成這個(gè)任務(wù)而不需要配置任何東西,ASP.NET MVC 默認(rèn)的路由約定會(huì)將跟在 Action 方法之后的部分看作名為 ID 的參數(shù)的值,如果你的 Action 方法有一個(gè)名為 ID 的參數(shù),那么,ASP.NeT MVC 就會(huì)自動(dòng)將這部分作為參數(shù)傳送給 Action 方法,需要注意的是,MVC 可以幫助你完成數(shù)據(jù)類型之間的轉(zhuǎn)換,所以,地址的第三部分一定要可以轉(zhuǎn)換為整數(shù)。
//
// GET: /Store/Details/5
public string Details(int id)
{
string message = "Store.Details, ID =" + id;
return message;
}
再次運(yùn)行程序訪問(wèn)/Store/Details/5
總結(jié)一下我們完成的任務(wù):
分享名稱:ASP.NETMVC音樂(lè)商店-2.控制器-創(chuàng)新互聯(lián)
文章分享:http://jinyejixie.com/article8/coieip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、云服務(wù)器、面包屑導(dǎo)航、品牌網(wǎng)站制作、網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容