使用选择框而不是单选按钮进行语言选择(MVC.NET)

时间:2014-03-30 19:42:36

标签: c# html .net asp.net-mvc-4 razor

我在MVC .NET应用程序中遵循了国际化(支持多种语言)的教程。我完全可以使用Index.cshtml中的以下代码:

    @using(Html.BeginForm("SetCulture", "Home"))
{
    <fieldset>
        <legend>@Resources.ChooseYourLanguage</legend>
        <div class="control-group">
            <div class="controls">
                <label for="nl">
                    <input name="culture" id="nl" value="nl" type="radio" @selected("nl", culture) /> Nederlands
                </label>
            </div>
        </div>
        <div class="control-group">
            <div class="controls">
                <label for="fr">
                    <input name="culture" id="fr" value="fr" type="radio" @selected("fr", culture) /> Français
                </label>
            </div>
        </div>
        <div class="control-group">
            <div class="controls">
                <label for="en">
                    <input name="culture" id="en" value="en" type="radio" @selected("en", culture) /> English
                </label>
            </div>
        </div>
    </fieldset>
}

当然,此代码在.cshtml文件中使用了一些其他脚本。如果需要,我可以提供这些附加部件。

我想使用选择菜单而不是单独的单选按钮。我尝试了跟随,但它似乎没有做任何事情或对代码做出反应以引发语言变化:

@using(Html.BeginForm("SetCulture", "Home"))
{
    <fieldset>
        <legend>@Resources.ChooseYourLanguage</legend>
        <select class="control-group">
            <option class="controls" id="nl" value="nl" @selected("nl", culture)>Nederlands</option>
            <option class="controls" id="fr" value="fr" @selected("fr", culture)>Français</option>
            <option class="controls" id="en" value="en" @selected("en", culture)>English</option>
        </select>
    </fieldset>
}

我不知道如何让它发挥作用。有人知道如何解决这个问题?

修改

我刚刚意识到我需要提供额外的代码,以便完全理解。所以在Index.cshtml的顶部有:

@{
    ViewBag.Title = "Politici Online: Hét platform om de burger dichter bij de manadataris te brengen!";
    var culture = System.Threading.Thread.CurrentThread.CurrentUICulture.Name.ToLowerInvariant();
}

@helper selected(string c, string culture)
{
    if (c == culture)
    {
        @:checked="checked"
    }
}

在底部有脚本部分:

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    <script type="text/javascript">
        (function ($) {
            $("input[type = 'radio']").click(function ()
            {
                $(this).parents("form").submit(); // post form
            });
        })(jQuery);
    </script>
}

如您所见,该脚本适用于单选按钮的使用...如何更改它以使其具有相同的功能但使用选择列表?

1 个答案:

答案 0 :(得分:2)

  

如您所见,该脚本适用于单选按钮的使用......如何   我会改变它,所以它具有相同的功能,但使用选择   列出?

为您的select元素提供唯一ID和name,以便您可以检索所选值服务器端:

<select class="control-group" id="language" name="culture">
    <option class="controls" id="nl" value="nl" @selected("nl", culture)>Nederlands</option>
    <option class="controls" id="fr" value="fr" @selected("fr", culture)>Français</option>
    <option class="controls" id="en" value="en" @selected("en", culture)>English</option>
</select>

然后订阅.change事件并在用户选择其他选项时提交父表单:

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    <script type="text/javascript">
        (function ($) {
            $('#language').change(function () {
                $(this).closest('form').submit(); // post form
            });
        })(jQuery);
    </script>
}