2010-12-06 19 views
0

私のウェブサイトプロジェクトにはasp.net mvcが使用されています。私は私のroutedataに間違ったことがあると思うが、私はそれが間違っているか、または大丈夫であると確信していない。私は状況を説明します。私は、生成されたキーMVC RouteDatasが混乱しています

 public static string GetKeyFromActionExecutingContext(ControllerContext filterContext) 
    { 
     StringBuilder keyBuilder = new StringBuilder(); 

     if (filterContext.IsChildAction) 
      keyBuilder.Append("C-"); 
     else 
      keyBuilder.Append("P-"); 

     foreach (var item in filterContext.RouteData.Values) 
     { 
      keyBuilder.AppendFormat("{0}={1}.", item.Key, item.Value); 
     } 

     return keyBuilder.ToString(); 

    } 

元にキャッシュに自分の行動の結果(HTML出力)をキャッシュしています :ホームページの場合は、生成されたキャッシュキーは、P-コントローラー= Home.Action =インデックスと

は私も持っていますLoginBoxのような私のsitemasterのchildactions(MembershipController/LoginBoxにあります) そのキャッシュキーはC-Controller = Membership.Action = LoginBoxです。

今まではすべてがオッケーです。

は、私はまた、私は、生成された

私は、ドメイン/カテゴリ1 からサブカテゴリを閲覧しています ドメイン/カテゴリ1 ドメイン/カテゴリ1/subcategory1 ドメイン/カテゴリ1/subcategory2 ドメイン/カテゴリ2のように私のウェブサイトでサブカテゴリを持っています コントローラー=会員 アクション= LoginBox CTG1 =カテゴリ1 :私のroutedatasは

filterContext.RouteData.Valuesが間違っているので、キーが失敗していますctg2 = "" ctg3 = ""

なぜこれらが混在しているのですか?それは "カテゴリ"のルーテッドマッピングを使用していますが、私は "デフォルト"のルーテッドマッピングを使用しなければならないと思います。また

routes.MapRoute(
      "Category", 
      "{ctg0}/{ctg1}/{ctg2}/{ctg3}", 
     new 
     { 
      controller = "Category", 
      action = "Index", 
      ctg0 = "", 
      ctg1 = "", 
      ctg2 = "", 
      ctg3 = "" 
     }, 
     new 
     { 
      ctg0 = new CategoryRouteConstraint(), 
     } 
     ); 

routes.MapRoute(
       "Default",            
       "{controller}/{action}/{id}",           new { controller = "Home", action = "Index", id = "" }, 
       new { controller = @"[^\.]*" }       
      ); 

以下のような

私のGlobal.asaxうまくいけば、これはあなたを助けるかもしれない、それはそのctg0値DBからチェックしている私のCategoryRouteConstraint方法は、カテゴリ名

public class CategoryRouteConstraint : IRouteConstraint 
{ 

    public Boolean Match(
     HttpContextBase httpContext, 
     Route route, 
     String sParameterName, 
     RouteValueDictionary values, 
     RouteDirection routeDirection 
     ) 
    { 
     if ((routeDirection == RouteDirection.IncomingRequest)) 
     { 
      if (values["ctg0"] != null && !string.IsNullOrEmpty(values["ctg0"].ToString())) 
       return Category.IsRoutingForCategory(values["ctg0"].ToString()); 
      return false; 
     } 
     return false; 
    } 


} 

答えて

関連する問題