我是MVC 3的新手,所以此时我正在尝试创建一个网站,我有一个语言选择器,我可以在网站上更改语言。
我有一个用于语言选择器的JQuery + html。
但现在我想知道如何将它与MVC 3集成?
以下是html:
<div id="polyglotLanguageSwitcher">
<form action="#">
<select id="polyglot-language-options">
<option id="en" value="en" selected>English</option>
<option id="fr" value="fr">Français</option>
</select>
</form>
</div>
这是部分模板,它在_Layout页面中使用
这是javascript:
$(document).ready(function () {
$('#polyglotLanguageSwitcher').polyglotLanguageSwitcher({
effect: 'fade',
testMode: true,
onChange: function (evt) {
alert("The selected language is: " + evt.selectedItem);
}
现在,如果我想让它工作,我可以使用javascript调用服务器代码并让语言更改为网站,但是我必须在每个控制器中实现它这个方法才能调用吗?
我怎么能这样做呢?所以我只能在某个地方定义这个方法,这可以一直调用,而不是在不同的控制器上编写或调用它?
我在考虑将这个_partial模板作为html.helper,这是一个很好的决策吗?如果是这样我怎么能成功呢?
由于
为了改变语言,我基本上使用路径路径(/ lang / action / id)和cookie来存储用户选择的语言。
答案 0 :(得分:0)
一种方法是设计一个基本控制器并在那里进行选定的语言管理。这样,您从基本控制器派生的任何控制器都可以访问该功能;
以下是一个基本控制器的简单实现,它将根据cookie填充ActiveLanguage。
public class BaseController : Controller
{
public string ActiveLanguage { get; set; }
public BaseController()
{
if (HttpContext.Request != null && HttpContext.Request.Cookies != null)
{
// copy value from the correct cookie to variable
var languageCookie = HttpContext.Request.Cookies.Get("name_of_the_cookie");
ActiveLanguage = languageCookie != null ? languageCookie.Value : string.Empty;
}
}
}
现在任何从BaseController派生的控制器都会有一个属性 ActiveLanguage ,它将描述所选语言