Asp.net中怎么實(shí)現(xiàn)一個(gè)MVC框架,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
網(wǎng)站建設(shè)、基于H5技術(shù)技術(shù)的Web開發(fā)、手機(jī)站開發(fā)、微信開發(fā)等互聯(lián)網(wǎng)應(yīng)用服務(wù)。成都創(chuàng)新互聯(lián)公司始終關(guān)注著互聯(lián)網(wǎng)行業(yè)的前沿動(dòng)態(tài),創(chuàng)新互聯(lián)堅(jiān)信:真誠(chéng)的態(tài)度,勤奮的工作是我們贏得客戶信賴的基礎(chǔ);而不斷創(chuàng)新、力求完美,才是創(chuàng)新互聯(lián)共同邁向美好未來的保證。
1,用MVC的話就不用ASP.NET的服務(wù)器控件,我們新建一個(gè)視圖login.aspx,把﹤%%﹥里面的東西都去掉只留﹤%@ Page Language="C#"%﹥
代碼如下:
﹤%@ Page Language="C#"%﹥ ﹤!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"﹥ ﹤html xmlns="http://www.w3.org/1999/xhtml" ﹥ ﹤head runat="server"﹥ ﹤title﹥Login﹤/title﹥ ﹤/head﹥ ﹤body﹥ ﹤form id="form1" action="Login.do" method="post"﹥ ﹤input id="Text1" type="text" name="name" /﹥﹤br /﹥ ﹤input id="Text2" type="text" name="pwd" /﹥ ﹤input id="Submit1" type="submit" value="submit" /﹥ ﹤/form﹥ ﹤/body﹥ ﹤/html﹥ |
2,在WEB.CONFIG里面定義一個(gè)新的映射,如下,即所類似XXX.do的請(qǐng)求都會(huì)被映射到Control.cs這個(gè)類上。這里我們可是以把所有的請(qǐng)求轉(zhuǎn)到Control類上作進(jìn)一步轉(zhuǎn)發(fā)。
﹤system.web﹥ ﹤httpHandlers﹥ ﹤add verb="*" path="*.do" type="Control"/﹥ ﹤/httpHandlers﹥ |
3,實(shí)現(xiàn)Control.cs這個(gè)類,新建一個(gè)Control類,讓他繼承 IHttpHandler接口,這個(gè)接口里面有兩一個(gè)屬性和一個(gè)方法,
bool IsReusable { get; }//如果 System.Web.IHttpHandler 實(shí)例可再次使用,則為 true;否則為 false。
void ProcessRequest(HttpContext context);// 啟用 HTTP Web 請(qǐng)求的處理??梢越邮盏巾撁娴恼?qǐng)求內(nèi)容,里面主要包括Request,Response,等,方便我們接收參數(shù)和頁面轉(zhuǎn)發(fā)。 |
Control.cs代碼如下:
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Reflection; /// ﹤summary﹥ /// HTTP 的摘要說明 /// ﹤/summary﹥ public class Control: IHttpHandler { public Control() { } public bool IsReusable { get { return true; } } public void ProcessRequest(HttpContext context) { HttpRequest req = context.Request; string path= req.CurrentExecutionFilePath; int index = path.LastIndexOf("/"); string path2 = path.Substring(index + 1); string actionName = actiondo.Substring(0, actiondo.Length - 3);//這里就能得到頁面form信息里面的字符Login //以上幾行代碼主要是得到action的名字。 //利用反射調(diào)用action,比如請(qǐng)求頁面現(xiàn)在 Type type = Type.GetType(actionName); Object kk = Activator.CreateInstance(type); type.GetMethod("Execue").Invoke(kk, new object[] { context });//Execue是Login.cs里面的一個(gè)方法,用于接收請(qǐng)求,處理數(shù)據(jù)。 } |
現(xiàn)在我們要建一個(gè)處理具本業(yè)務(wù)的action類即Login.cs ,代碼如下:
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Collections; public class Login { public Login() { } public void Execue(HttpContext contex) { //處理具體的業(yè)務(wù)羅輯和數(shù)據(jù)操作。并重定向到指定頁面 //一般是處理出來的數(shù)據(jù)保存到模型里面,方便視圖調(diào)用數(shù)據(jù)顯示。 contex.Response.Redirect("OK.aspx"); } } |
4,我們現(xiàn)在建一個(gè)數(shù)據(jù)模型Person,可以保存和返回?cái)?shù)據(jù)集,即MVC里面的M,
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Collections; namespace Person { /// ﹤summary﹥ /// Model 的摘要說明 /// ﹤/summary﹥ public class Person { public Person() { } privatestring _id; privatestring _name; publicstring Id { get { return _id; } set { _id = value; } } publicstring Name { get { return _name; } set { _name = value; } } publicDataTabledt { get { } set { } } } } |
5,OK.aspx里面顯示處理后的數(shù)據(jù)顯示,可以用person里面的dt屬性返回?cái)?shù)據(jù)按asp顯示數(shù)據(jù)的方法顯示出
﹤table﹥ ......... ﹤/table﹥ |
關(guān)于Asp.net中怎么實(shí)現(xiàn)一個(gè)MVC框架問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。