ome/img/nav3_on.png">
APP
系统平台
  • 建站知识
  • 联系我们
  • 咨询热线 :
    028-86922220

    疆括仕网站建设,新征程启航

    为企业提供网站建设、域名注册、服务器等服务

    自己动手实现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()时找不到处理好的数据。

    您正在阅读的是:自己动手实现Asp.net的MVC框架


    名称栏目:自己动手实现Asp.net的MVC框架
    浏览路径:https://tyhkzb.com/article/dpsghoh.html
    在线咨询
    服务热线
    服务热线:028-86922220
    TOP