2015-03-03 7 views
13

Bu soruyu herhangi bir detayla cevaplayan bir makale olmadığını görmekten şaşıyorum. RouteData.Values[""] ile ilgili birkaç sorum var.Routedata.Values ​​[""] nedir?

public ActionResult Index() 
{ 
    ViewBag.Message = string.Format("{0}---{1}--{2}", 
     RouteData.Values["Controller"], 
     RouteData.Values["action"], 
     RouteData.Values["id"]); 

    return View(); 
} 
İşte

temelde potansiyel olarak kumandanın "Meta-veri" gibi sesler değerlerini okuyor:

Bu kodu gördüm. Ya da View'ın Controller'a da geçebileceği bir şey mi?

cevap

14

RouteData.Values, yönlendirme yönlendirme sınıfları tarafından eklenen değerler/querystring değerlerine erişmek için kullanılır.
Sizin durumunuzda, rota konfigürasyon sınıfınızda tanımlanan rota, argümanların sağlanabileceği ek parametrelere sahiptir.
Parametreler denetleyici, eylem, id.
Bu parametrelerdeki argümanlar, kodunuzda bir yere yerleştirilmiş olabilir.

Birkaç kat daha yüksek bir seviyeye başladığınızda daha mantıklı olur, dolayısıyla ne aradığınızı bilirsiniz.

  1. Global.asax.cs

    protected void Application_Start(object sender, EventArgs e) 
    { 
        routingActions.RegisterCustomRoutes(RouteTable.Routes); 
    } 
    
  2. diğer bir sınıfı, yukarıdaki yöntemi tanımlamaktadır:

    public void RegisterCustomRoutes(RouteCollection routes) 
    { 
        routes.MapPageRoute("searchdetails", "searchdetails/{orderID}/{PageIndex}/{PageSize}", "~/View/SearchDetails.aspx"); 
    } 
    
  3. aşağıdaki kod, bir köprü oluşturur. Ana fark, HREF'nin inşa edildiği yoldur. Bu durumda, rota yapılandırmamı içeren sınıfta "searchdetails" tanımlanır.

    linkToDetails.HRef = GetRouteUrl("searchdetails", 
           new 
           { 
            orderID = someOrderID, 
            PageIndex = currentPageIndex, 
            PageSize = PageSize 
           }); 
    
  4. Son olarak, hedef sayfa içinde [ ""] biz RouteData.Values ​​kullanmak burasıdır

    protected void Page_Load(object sender, EventArgs e) 
    { 
        var _orderid = Page.RouteData.Values["orderID"].ToString(); 
        var _PageIndex = Convert.ToInt32(Page.RouteData.Values["PageIndex"]); 
        var _PageSize = Convert.ToInt32(Page.RouteData.Values["PageSize"]); 
    } 
    
+1

Neden Page_Load 3. adımda geçirilen bu bilgileri kullanması gerekir açıkça MVC uygulaması? – Stack0verflow

+0

@ Stack0verflow Bir web formları sitesinde benzer şekilde kurulumumuz var. Bunu yapabilirsiniz, sadece varsayılan değil (MVC'nin aksine). – Trisped