香港虚拟主机
本站公告
新闻资讯
虚拟主机帮助
域名帮助
服务器帮助
邮箱帮助
建站帮助
网站推广帮助
VPS帮助
特色主机帮助
网站备案专题
会员帮助信息
代理帮助信息
成功案例
王莹谈个人网站单打独斗难成…
买空间送网站活动全面启动
7月1日正式实名制 网购业或迎…
“一站式服务” 将成互联网主…
新疆互联网服务全面恢复
互联网之父:未来互联网不用…
“永不落幕”的世博会互联网…
坠落的263.net二度重来 已是…
大学毕业生自行创业开网络公…
视频网站屏蔽海外IP跨区域侵…
您现在的位置: 江南数联 >> 帮助中心 >> 建站帮助 >> 正文

自己动手实现Asp.net的MVC框架

  作者:admin    来源:本站原创    点击次数:29     更新时间:2009-7-16 17:45:18  
     
 
关注石头有礼
 
 

自己动手实现Asp.net的MVC框架

了解JAVA的人都了解struts框架,是一个典型的mvc框架,早些时候微软也实现了.NET版的MVC,用到了路由技术,由于不开源,好多地方感到有些迷惑,于是有一个想法,为什么不自已写一个MVC的框架呢。

说到MVC,先说一下JAVA STRUTS的实现和原理,所有的HTTP请求都会连到一个JAVA类,control类,mvc的c模型 (实现HTTP接口),control类跟据页面FORM上的ACTION标记,当然这里的ACTION的值是一个操作类的名字,我们叫它ACTION 类,然后跟据反射用类的名字调用这个类,当然反射调用时也把http请求的内容传进去。然后action类里面跟据请求里面的参数作一定的业务罗辑处理, 处理完之后,把数据内容放在类里面,重定向一个页面。视图显示action里面的处理后的数据。

知道了MVC的原理,我们现在就用.NET来实现MVC。

1,用MVC的话就不用ASP.NET的服务器控件,我们新建一个视图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里面定义一个新的映射,如下,即所类似XXX.do的请求都会被映射到Control.cs这个类上。这里我们可是以把所有的请求转到Control类上作进一步转发。

﹤system.web﹥﹤httpHandlers﹥﹤add verb="*" path="*.do" type="Control"/﹥﹤/httpHandlers﹥


3,实现Control.cs这个类,新建一个Control类,让他继承 IHttpHandler接口,这个接口里面有两一个属性和一个方法,
bool IsReusable { get; }//如果 System.Web.IHttpHandler 实例可再次使用,则为 true;否则为 false。

void ProcessRequest(HttpContext context);// 启用 HTTP Web 请求的处理。可以接收到页面的请求内容,里面主要包括Request,Response,等,方便我们接收参数和页面转发。


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 path1 = path.Substring(index + 1);string actionName = actiondo.Substring(0, actiondo.Length - 3);//这里就能得到页面form信息里面的字符Login//以上几行代码主要是得到action的名字。//利用反射调用action,比如请求页面现在Type type = Type.GetType(actionName);Object kk = Activator.CreateInstance(type); type.GetMethod("Execue").Invoke(kk, new object[] { context });//Execue是Login.cs里面的一个方法,用于接收请求,处理数据。} 


现在我们要建一个处理具本业务的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){//处理具体的业务罗辑和数据操作。并重定向到指定页面 //一般是处理出来的数据保存到模型里面,方便视图调用数据显示。 contex.Response.Redirect("OK.aspx");}}


4,我们现在建一个数据模型Person,可以保存和返回数据集,即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里面显示处理后的数据显示,可以用person里面的dt属性返回数据按asp显示数据的方法显示出

﹤table﹥......... ﹤/table﹥ 

为了方便OK.aspx调用数据,在Login.cs里面声明person模型时可以用静态声明的方式,以防在ok.aspx页面上 new person()时找不到处理好的数据。

本章关健词:江南数联 域名注册 海外虚拟主机 G享虚拟主机 国内虚拟主机 企业邮箱 网站建设 自助建站 400电话申请 微聚商

 
  版权申请:自己动手实现Asp.net的MVC框架出自江南数联dns06.com未经授权请勿转载!  
 
  • 上一篇帮助:

  • 下一篇帮助:
  •  
         

    扫一扫关注公众号有礼
    Copyright@2004-2015 江南数联 版权所有未经授权请勿复制!
    《中华人民共和国增值电信业务经营许可证》ISP证编号:皖B2-20080036 湘B2-20160056
    公司全称:永州石头网络技术有限公司(运营部)
    地址: 中国·湖南省永州市育才路158号 服务热线:400 616 9260
    安徽公司:安徽仁科信息技术有限公司 地址:合肥万和新城广场A-608 
    关注词:网站空间虚拟空间空间域名域名空间域名主机网站空间哪家好网站空间多少钱