2013-06-21 4 views
1

내가 슈퍼 기본 뭔가가 ...하지만 리소스 파일을 사용하여 현지화을하려고 나는 단순히 MSDN 예제의 코드 숨김에서 here:ASP.Net 현지화 InitializeCulture 컨트롤 항상 null

을 발견 사용하고해야 내 페이지 내 마크 업에서

Protected Overrides Sub InitializeCulture() 
     If Request.Form("listLanguages") IsNot Nothing Then 
      Dim selectedLanguage As String = _ 
       Request.Form("listLanguages") 
      UICulture = Request.Form("listLanguages") 
      Culture = Request.Form("listLanguages") 
      Thread.CurrentThread.CurrentCulture = _ 
       CultureInfo.CreateSpecificCulture(selectedLanguage) 
      Thread.CurrentThread.CurrentUICulture = New _ 
       CultureInfo(selectedLanguage) 
     End If 
     MyBase.InitializeCulture() 
    End Sub 

:

<form id="form1" runat="server" defaultbutton="btnStart" autocomplete="off" > 
        <asp:Label ID="lblLanguageChoice" AssociatedcontrolID="listLanguages" runat="server" Text="Language Options"></asp:Label> 
        <asp:ListBox ID="listLanguages" runat="server"> 
         <asp:ListItem Value="en" Selected="True" Text="English"></asp:ListItem> 
         <asp:ListItem Value="es" Text="Español"></asp:ListItem> 
        </asp:ListBox> 
        <asp:Button ID="btnChangeLanguage" runat="server" 
        Text="Change Language" /> 
....... 

하지만, 목록 상자 (언어를 선택한 후 버튼을 타격) 코드를 단계별로 때 이 이벤트가 발생하는 페이지 사이클의 초기 단계에서 어떤 의미가 있는지는 "아무 것도 없음"입니다.

이 루틴을 통해 내 언어 선택을 어떻게 알 수 있습니까? 버튼 클릭시 세션 변수에 선택한 내용을 채우려고했지만 "클릭 뒤"입니다. (한 번 클릭하면 언어 선택 사항을 저장하지만 기본 언어로 유지됩니다. 두 번 클릭하면 선택한 언어로 전환됩니다.) 버튼 클릭 순간에 새로 고침을하는 솔루션이 필요하며 사용자가이를 클릭하지 않아도됩니다 두번.

편집 : 이유를 찾았습니다. 이제 해결 방법을 찾아야합니다. 그것은 미친 ASP 명명 규칙입니다. 내 목록 상자의 이름이 "listLanguages"가 아닙니다. "ctl00 $ MainContent $ listLanguages"라는 이름이 붙여졌습니다. ClientIDMode static은 ID가 변경되지만 이름은 변경하지 않기 때문에 해결되지 않습니다. 완전히 해결되면 게시 할 것입니다.

EDIT2 : 여기 있습니다. 그것은 약간 hackish이고이 페이지에 많은 매개 변수가 없기 때문에 단지 작동합니다. 누구든지 좀 더 세련된 솔루션을 알고 있다면 정말 고맙겠습니다.

Dim request As HttpRequest = Me.Request 
     Dim params As NameValueCollection = request.Form 
     For Each par As String In params.AllKeys 
      If par.Contains("listLanguages") Then 
       Dim selectedLanguage As String = request(par) 
       UICulture = request(par) 
       Culture = request(par) 
       Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage) 
       Thread.CurrentThread.CurrentUICulture = New CultureInfo(selectedLanguage) 
      End If 
     Next 

     MyBase.InitializeCulture() 

답변

1

답이 매우 늦기 때문에 도움이 될지 잘 모르겠습니다.

  1. 제어
  2. 사용 PageMethods (또는 JQuery와 아약스) 정적에 서버 측에
  3. 스토어 ID를 고유 ID를 전달하는 호출을 UniqueID 가져 오기 :

    이 솔루션은 다음과 같다

다음 당신의 "InitializeCulture"방법의 변수

  • 사용이 정적 변수는 각 코드입니다 단계. ListBox 대신 DropDownList를 사용했지만 중요하지 않습니다. 또한 코드는 C#이지만 VB.NET으로 변환해도 문제가되지 않습니다.1 단계 및 2의

    :

    :

    페이지 방법을 사용

    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"> </asp:ScriptManager> 
    

    전화 3 단계에서

    $("document").ready(function() { PageMethods.SendForm('<%= DropDownList1.UniqueID %>', OnSucceeded, OnFailed); }); 
    

    로 "PageMethods"을 사용하여 뒤에 코드의 방법으로

    static string dropDownUniqueID; 
    
        [System.Web.Services.WebMethod] 
        public static void SendForm(string uniqueID) 
        { 
         dropDownUniqueID = uniqueID; 
        } 
    

    단계 4 :

    이 정보가 도움이되기를 바랍니다.

    감사합니다, 아주 좋은 솔루션입니다

    사마르

  • +0

    . 하지만 그것은 javascript에 의존합니다. 즉, 사이트를 사용하는 누군가가 javascript를 사용할 수 있어야합니다. 여전히 잘 작동 할 것 같습니다. 고맙습니다! – user158017

    +0

    저는 실제로 사용하지 않았습니다. 나는 자바 스크립트에 의존하지 않기 때문에 여전히 내 솔루션을 사용하고 있습니다. 그래서 나는 대답으로 확인하지 않았다. 하지만 담당자에게 그걸 확인해 줄 게. – user158017