.Net教程之基于ASP.NET2.0的非HttpModule山寨版MVC框架的實現_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:淺析ASP.NET LinkButton組件編程
      ASP.NET LinkButton組件編程是什么概念呢?首先讓我們來看看: 在ASP.NET的WebForm組件中的LinkButton組件也是一個服務器端的組件,這個組件有點類似于HTML中的﹤A﹥標識符。它的主要作用是就是在ASP.NET頁面中顯示一個超鏈接。當這個鏈接被按動的時候,頁面

      在ASP.Net MVC框架中是使用地址攔截的,雖然很好用,但是裝起來太大了,配置也麻煩。本文通過代碼實踐,在ASP.Net2.0框架下實現一套簡易的MVC框架。MVC框架難于構建的地方在于Controller與View的分離以及分離后數據可以方便地傳輸。為了保持代碼的簡潔,將使用ashx文件作為Controller,用aspx頁面作為View。

      講起來比較費勁,把項目文件放上來,而下面只作一個簡單的說明。項目是VS2008的項目,大小15K。

      下載地址:DotNetMVC.rar

      首先構建一個Controller基類。

      以下為引用的內容:


      /**
       * author : yurow
       *      
      http://birdshover.cnblogs.com
       * description:
       *      
       * history : created by yurow 2009-9-20 7:30:04 
       
      */

      using System.Web;
      using System.Web.Services;

      namespace DotNetMVC.MVC {
          
      /// <summary>
          
      /// 控制器
          
      /// </summary>
          [WebService(Namespace = "http://tempuri.org/")]
          [WebServiceBinding(ConformsTo 
      = WsiProfiles.BasicProfile1_1)]
          
      public abstract class Controller<T, K> : IHttpHandler {
              
      /// <summary>
              
      /// 當前請求
              
      /// </summary>
              protected MyRequest Request;
              
      /// <summary>
              
      /// 輸出
              
      /// </summary>
              protected HttpResponse Response;
              
      /// <summary>
              
      /// 返回到View頁面的數據
              
      /// </summary>
              protected MvcViewData<T, K> ViewData;
              
      /// <summary>
              
      /// 控制器名稱
              
      /// </summary>
              private string controllerName;
              
      /// <summary>
              
      /// 控制器操作方法
              
      /// </summary>
              public abstract void Action();
              
      /// <summary>
              
      /// 執行請求
              
      /// </summary>
              
      /// <param name="context"></param>
              public void ProcessRequest(HttpContext context) {
                  Request 
      = context.Request;
                  Response 
      = context.Response;
                  
      //這里可以用反射的方式進行帶參數的操作,這里為了簡化,去掉了這部分
                  
      //MethodInfo method = this.GetType().GetMethod("Action", new Type[0]);
                  
      //if (method == null) {
                  
      //    throw new NotImplementedException("沒有實現!");
                  
      //}
                  
      //object data = method.Invoke(this, null) as object;

                  ViewData 
      = new MvcViewData<T, K>();
                  Action();
                  context.Items.Add(
      "MvcViewData", ViewData);
                  context.Server.Transfer(
      "~/View/" + ControllerName + ".aspx"false);
              }
              
      /// <summary>
              
      /// 控制名稱,不設置默認為View頁面與控制器名稱同名
              
      /// 比如,在Login.ashx請求中,默認調用View/Login.aspx的頁面作為顯示頁面。
              
      /// 當登錄成功后,設置其為LoginOK,則會調用View/LoginOK.aspx
              
      /// </summary>
              protected string ControllerName {
                  
      get {
                      
      if (string.IsNullOrEmpty(controllerName))
                          
      return this.GetType().Name;
                      
      return controllerName;
                  }
                  
      set {
                      controllerName 
      = value;
                  }
              }

              
      public bool IsReusable {
                  
      get {
                      
      return false;
                  }
              }
          }
      }

      Controller在ProcessRequest方法中調用aspx頁面,里面設置了一個虛方法Action在具體的ashx文件中重載。

      下面是Default.ashx.cs文件的寫法

      以下為引用的內容:


      sing DotNetMVC.MVC;

      namespace DotNetMVC {
          
      /// <summary>
          
      /// $codebehindclassname$ 的摘要說明
          
      /// </summary>
          public class Default : Controller<stringstring> {
              
      public override void Action() {

              }
          }
      }

      在Controller中,還有兩個重要的東西一個是傳遞給View數據用的,一個是顯示哪個View的(通過ControllerName這個屬性)

       

      分享:淺談ASP.NET中如何使用AJAX中的方式
      ASP.NET中使用AJAX中的方式之背景介紹 asp.net中使用php常用的jquery等類庫來實現ajax不是很容易。因為asp.net的機制已經被封裝了,依靠內部的viewstate,如果硬用js修改了控件的值,跟他的viewstate對不上,而這些控件又是不可修改的,將對程序造成安全性困

      來源:模板無憂//所屬分類:.Net教程/更新時間:2009-10-03
      相關.Net教程