2013-03-27 3 views
0

Я создаю сайт Multi-Lingual в проекте aspx webforms, и я думаю о лучшем решении для этого.Настройка CurrentUI в проекте ASPX

У меня есть некоторые изображения на MasterPage, и один раз щелкнул, я вызываю метод JQuery, который должен перенаправить на веб-метод.

В свою очередь, у меня есть базовая страница, которая инициализирует Культуру, и все страницы, за исключением MasterPage, наследуются от нее.

До сих пор у меня есть следующие: -

HTML: -

<div class="LocalizationFlags"> 
<img src="Images/gb.png" onclick="langSelection('gb')" /> &nbsp; &nbsp; 
<img src="Images/fr.png" onclick="langSelection('fr')"/> &nbsp; &nbsp; 
<img src="Images/es.png" onclick="langSelection('es')"/> &nbsp; &nbsp; 
<img src="Images/de.png" onclick="langSelection('de')"/> &nbsp; &nbsp; 
<img src="Images/it.png" onclick="langSelection('it')"/> 
</div> 

JQuery: -

function langSelection(lang) { 
    setSession(lang); 
}; 

function setSession(Lang) { 
    var args = { 
     lang: Lang 
    }; 
    $.ajax({ 
     type: "POST", 
     url: "Site.Master.aspx/SetUserCulture", 
     data: JSON.stringify(args), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function() { 
      alert('Success.'); 
     }, 
     error: function() { 
      alert("Fail"); 
     } 
    }); 
}; 

Site.Master.cs

[WebMethod(EnableSession = true)] 
    private void SetUserCulture(string lang) 
    { 
     HttpContext.Current.Session["CurrentUI"] = lang; 
    } 

BasePage. cs

protected override void InitializeCulture() 
    { 
     if (Session["CurrentUI"] != null) 
     { 
      String selectedLanguage = (string)Session["CurrentUI"]; 
      UICulture = selectedLanguage; 
      Culture = selectedLanguage; 

      Thread.CurrentThread.CurrentCulture = 
       CultureInfo.CreateSpecificCulture(selectedLanguage); 
      Thread.CurrentThread.CurrentUICulture = new 
       CultureInfo(selectedLanguage); 
     } 

     base.InitializeCulture(); 
    } 

Теперь есть несколько проблем с тем, что у меня есть на данный момент. JQuery не работает, выдает «Fail», а также я знаю, что я не могу использовать Site.Master.cs для ввода веб-метода.

Это всего лишь случай создания службы WCF для этого метода и затем называет его кодом JQuery?

Я нахожусь на правильном пути здесь?

Спасибо за вашу помощь и время

ответ

0

Ваш запрос Ajax, скорее всего, терпит неудачу, потому что он не доходит до места назначения - как вы сказали, что вы не можете иметь WebMethod в коде мастера. Также нет необходимости сериализовать ваши параметры с помощью JSON, простой объект должен работать так же хорошо. Кроме того, dataType: json здесь не требуется - вы не возвращаете данные для этого запроса.

Здесь нет необходимости в веб-сервисе - достаточно простого HTTP-обработчика. Просто не забудьте реализовать интерфейс маркера IRequiresSessionState, чтобы иметь доступ к сеансу внутри обработчика.

В общем, файлы cookie могут быть лучшим местом для хранения пользовательской культуры, поскольку вы можете сохранить эту информацию в разных посещениях одного и того же пользователя. Другим вариантом является также профиль пользователя в БД - в случае, если вы имеете дело с зарегистрированными пользователями. Однако ваша текущая реализация, использующая сеанс, должна работать.

+0

Привет, Андрей, спасибо за объяснение. Не могли бы вы привести мне пример обработчика HTTP, на который вы ссылались? – Johann

+0

@Johann, вот ссылка на страницу [MSDN] (http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx). В двух словах это очень просто - вы реализуете интерфейс с одним методом, регистрируетесь в web.config, а затем вызываете его из других частей приложения. – Andrei

+0

Привет, Андрей, поэтому я создал класс CultureHandler, который реализует IHTTPHandler и IRequiresSessionState с помощью одного метода SetUserCulture (string lang). Как вы зарегистрируете его в web.config, а затем используете его в коде? – Johann

Смежные вопросы