ASP.NET MVCの具体的な実装の詳細

3676 ワード

前編でMVC 2を紹介した後、あなたはきっと顧みないと信じて、それでは、いいでしょう、私は認めます......今正式に紹介を始めましょう

ASP.NET MVC 2の処理順序はroutes->controller->action(model)->viewであり、表現形式はGlobalにルーティングテーブルがある.aspx.csでは、Urlを解析した後、専用のControllerの1つのActionにデータを渡して処理し(XXXController.csで)、View(XXXフォルダの下のactionName.aspxで)に戻ります。actionNameはControllerの処理のActionの名前と同じであることが望ましいが、Controllerの前のXXXもXXXフォルダの名前と同じである必要があります。


まずGlobalからaspx.cs始めましょう.これが伝説のルートルートRouteです.では、まずコードを貼ってください.
public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            //   .axd   Route,        .axd  ,    *        axd        
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", //     
                "{controller}/{action}/{id}", //       URL
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } //      
            );

        }

        protected void Application_Start()//Web           ~
        {
            AreaRegistration.RegisterAllAreas();//       

            RegisterRoutes(RouteTable.Routes);//      
        }
    }
気をつけてMapRouteという関数は、Urlパラメータをそれぞれcontroller、action、idとして解析すると信じられています.例えば、Url:http://127.0.0.1/Home/About/10では、対応するコントローラはホーム、actionはAbout、Iidは10です.
そこで、私たちは自分でrouteを書くことができます.例えば
routes.MapRoute(
         "History",
         "Histroy/{year}/{moonth}/{day}",
          new { controller = "Home", action = "Histroy",year= = "years",month = "month",day = "day"}
);
次のリンクにアクセスできます.http://127.0.0.1/History/2011/6/21ということで、ルートはHomeというControllerの中のHistoryというアクションに情報を伝えて処理していきますが、伝わる「日付」は2011年7月22日で、理解?焦らず、まだ話していません.
注意しなければならないのは
  • 複数のrouteがある場合、特殊なrouteは一般的なrouteの前に置く必要があります.そうしないと、routeは機能しない可能性があります.ルーティングテーブルは一致して検索するため、あなたが書いたrouteの前に同じ一致するrouteがあれば、あなたのrouteは永遠に一致しない可能性があります.
  • controllerおよびActionの定義は必須である、そうでなければ情報は特定のAction処理
  • を得ることができない.
  • もっと素晴らしい内容はhttp://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx
  • それからhttp://127.0.0.1/の例を引き続き説明するが、上記のrouteを見ると、パラメータが入力されていない場合、デフォルトのcontrollerはHomeであり、ActionはIndexであるため、情報データはHomeControllerに伝達される.csの中のファイルの中のIndex()は処理して、信じませんか?はい、調整してください.次はHomeCotrollerです.cs
    namespace MvcApplicationTest.Controllers
    {
        [HandleError]//    ,    ~
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                ViewData["Message"] = "     ASP.NET MVC!";//                      ,       ?   ViewData
                return View();//  view,     Home     Index.aspx   
            }
    
            public ActionResult About()
            {
                return View();
            }
        }
    }
    そして、ホームフォルダの下にあるIndexです.aspx
    <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
          
    </asp:Content>
    
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
        <h2><%: ViewData["Message"] %></h2><!--         ,ViewData         -->
        <p>
                   ASP.NET MVC      ,    <a href="http://asp.net/mvc" title="ASP.NET MVC   ">http://asp.net/mvc</a>。
        </p>
    </asp:Content>
    そして、上のページ処理によりhtmlを生成してクライアントに戻る~