C# 作为html助手或部分+;实施

C# 作为html助手或部分+;实施,c#,asp.net-mvc-3,localization,C#,Asp.net Mvc 3,Localization,我是MVC 3的新手,所以现在我正在尝试创建一个网站,在那里我有一个语言选择器,我可以更改网站上的语言 我有一个JQuery+html语言选择器 但是现在我想知道如何将它与MVC3集成 以下是它的html: <div id="polyglotLanguageSwitcher"> <form action="#"> <select id="polyglot-language-options"> <option

我是MVC 3的新手,所以现在我正在尝试创建一个网站,在那里我有一个语言选择器,我可以更改网站上的语言

我有一个JQuery+html语言选择器

但是现在我想知道如何将它与MVC3集成

以下是它的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>
现在如果我想让它工作,我可以用javascript调用服务器代码,让网站的语言改变,但是我必须在每个控制器中实现它,这个方法调用对吗

我一般怎么做?所以我只能在某个地方定义这个方法一次,并且可以一直调用它,而不是在不同的控制器上编写或调用它

我正在考虑将这个部分模板作为一个html.helper,这是一个好的说明吗?如果是这样的话,我怎么能做到呢

谢谢


为了基本上更改语言,我使用路由路径(/lang/action/id)和cookie来存储用户选择的语言。

一种方法是设计一个基本控制器并在那里进行选择的语言管理。这样,从基本控制器派生的任何控制器都可以访问该功能

下面是一个基本控制器的简单实现,它将基于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,该属性将描述所选语言

您应该决定的第一件事是如何在每个请求上存储/传递所选语言。你已经做出了架构上的决定了吗?您打算使用路由参数、cookie还是服务器端会话变量?您打算如何在每个请求上设置当前线程CultureInfo?是的,我正在使用route参数和cookie
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;
        }
    }
}