2010-08-17 1 views
1

마스터 페이지의 언어 변경 컨트롤을 통해 사이트를 현지화하고 있습니다. 각기 다른 언어로 현재 URL로 컨트롤을 렌더링해야합니다.URL을 현재 작업으로 가져 오는 방법 (일부 경로 데이터를 수정 한 후)?

그래서 당신은 도중에 http://site.com/에 있다면는/홈/소개하고 프랑스어로 언어를 변경, 나는 http://site.com/FR/홈/소개 당신을 지시 할 필요가있다.

지역화 코드 경로 데이터 언어 속성에서 작동, 그래서 내가 할 수있는 방법 알아 내기 위해 노력했습니다 :

  1. 가져 오기 (모든 원본 매개 변수) 현재의 행동에 액세스 할 수 있습니다 경로 데이터가 변경된 현재 작업 (모든 원래 매개 변수 사용)에 대한 URL

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

부모로부터 ViewContext를 전달하여 경로 데이터에 액세스 할 수있는 UserControl에 전달하려고 시도했지만 언어 라우팅 URL을 가져 오는 방법을 알 수 없습니다.

답변

0

저는 100 % 만족하지는 못하지만, 저는 이것의 영향을 충분히 테스트 할 수있는 무대에 가지 못했지만, 지금까지 제가하고있는 일입니다. 더 나은 해결책이 있다면 대답 해주십시오.

내가 현재있는 URL의 경로 데이터와 함께 ViewContext를 얻을 수 있도록 MasterPage에서 ViewContext를 전달합니다.

private string GetLocalisedUrl(ViewContext viewContext, string language) 
{ 
    viewContext.RouteData.DataTokens[LANGUAGE_ROUTEDATA_KEY] = language; 
    UrlHelper helper = new UrlHelper(viewContext.RequestContext); 

    return helper.Action(viewContext.RouteData.Values["action"].ToString(), viewContext.RouteData.Values["controller"].ToString(), viewContext.RouteData.DataTokens); 
} 
0

저는 로컬에서 작업하고있는 사이트에서이 파일을 실행했는데 작동하는 것으로 보입니다. 아마 더 깨끗한 방법이있을거야.

HttpRequestBase hrb = HttpContext.Request; 
System.Uri url = hrb.Url; 
string[] test = url.AbsoluteUri.Split('/'); 
int nIndex = 0, nCounter = 0; 
foreach(string str in test) 
{ 
    if (str.Contains("site.com")) 
    { 
    nIndex = nCounter; 
    break; 
    } 
    nCounter++; 
} 
string strLanguage = test[nIndex + 1]; 

분명히 +1은 IF 문에도 적용될 수 있지만 분명 좋지 않다고 생각했습니다. 희망이 좀 도움이됩니다.

+0

제안에 감사드립니다.하지만 MVC 라우팅 솔루션을 찾고 있습니다. 수동 URL 재 작성 솔루션이 아닙니다. –

+0

그래, 실제로 컨트롤러 앞에서 아무 것도 잡는 방법을 모르겠다. 가능한 경우 전역 파일에서 {language}/{controller}/{action}이 있어야한다고 생각하지만 현재 실제 예제를 제공 할 수는 없습니다. – XstreamINsanity

관련 문제