语言选择器下拉列表为html帮助器或部分+实现

时间:2013-06-16 16:55:32

标签: c# asp.net-mvc-3 localization

我是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来存储用户选择的语言。

1 个答案:

答案 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 ,它将描述所选语言