0

나는 당신이 볼 수 있듯이, 나는 두 가지 속성, "놈"을 가지고 다음 클래스MvcSiteMapProvider, DynamicNodeProviderBase 및 세계화

public class MenuVeiculo 
{ 
    public string Nome { get; set; } 
    public string NomeEn { get; set; } 
    public Guid ID { get; set; } 
} 

에게있다 "NomeEn을." 각각은 이름과 이름을 영어로 나타냅니다.

Mvc.sitemap

<mvcSiteMapNode key="MenuVeiculo" dynamicNodeProvider="Semep.Extensibilidade.SiteMap.MenuVeiculoDynamicNodeProvider, Semep" title="Menu veiculo" action="Index" controller="Rental"> 

MenuVeiculoDynamicNodeProvider.cs

public class MenuVeiculoDynamicNodeProvider : DynamicNodeProviderBase 
{ 
    public override IEnumerable<DynamicNode> GetDynamicNodeCollection() 
    { 
     var context = DependencyResolver.Current.GetService<SemepContext>(); 
     var listDB = (from p in context.MenusVeiculo 
         select new 
            { 
             p.Nome, 
             p.ID 
            }); 

     const string keyFormat = "MenuVeiculo_{0}"; 
     foreach (var menu in listDB.ToList()) 
     { 
      var key = string.Format(keyFormat, menu.ID.ToString().ToUpper()); 
      var root = new DynamicNode(key, menu.Nome) 
          { 
           Title = menu.Nome 
           , 
           Key = key 
          }; 
      root.Attributes.Add("id", menu.ID.ToString()); 
      root.RouteValues.Add("id", menu.ID); 
      yield return root; 
     } 
    } 

    #endregion 
} 

질문

내 질문은, 어떻게 다중 언어 및 DynamicNodeProviderBase와 함께 작업하는 것입니다? 보시다시피 두 개의 필드가 있으며 하나만 표시합니다. "Thread.CurrentThread.CurrentCulture"의 문제가 MvcSiteMapProvider가 결과를 캐시하는 것입니다,이 문제를 처리하는 방법 :

답변

0

예이 MvcSiteMapProvider의 단점 중 하나입니다. 프로젝트에서 모든 노드를 반환하고 각 지역화에 대해 하나씩 사용하고 사용자 정의 VisibilityProvider를 사용하여 올바른 지역화만을 표시함으로써이를 해결했습니다.

0

당신은 LANG 매개 변수로 추가 경로를 만들어야합니다

routes.MapRoute(
     name: "Default_lang", 
     url: "{lang}/{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     constraints: new { lang = @"^(en|ru)$" }, 
     namespaces: new[] { "PNSoft.WebSite.Controllers" } 
    ); 

그런 다음 mvc.sitemap 당신이 랭 = "..."루트 노드와 자식 노드에 대한 매개 변수 당신이 필요로 지정 세트 inheritedRouteParameters = "LANG"를 한 다음 노드 RouteValues ​​속성에서 LANG을 얻을 수 있습니다 :

 public override IEnumerable<MvcSiteMapProvider.DynamicNode> GetDynamicNodeCollection(MvcSiteMapProvider.ISiteMapNode node) 
     { 
      var lang = (string)node.RouteValues["lang"]; 
... 
     } 

그게 전부!