ASP.NET MVC多语言功能无法按预期工作

时间:2015-09-27 16:23:46

标签: asp.net-mvc asp.net-mvc-3

我的应用使用单选按钮工作,例如

@using (Html.BeginForm("SetCulture", "Home"))
{
<input type="radio" name="culture" id="en-us" value="en-us" class="culture" /> English
<input type="radio" name="culture" id="tr" value="tr" class="culture" /> Türk
}

但是当我使用输入图片类型时,它不会发送想要的 VALUE

@using (Html.BeginForm("SetCulture", "Home"))
{
<input type="image" src="~/Content/Images/en.png" name="culture" id="en-us" value="en-us" class="culture" /> 
<input type="image" src="~/Content/Images/tr.png" name="culture" id="tr" value="tr" class="culture" />
}

jQuery代码:

$(".culture").click(function () {
     $(this).parents("form").submit(); // post form
});

HomeController代码:

public ActionResult SetCulture(string culture){
    // action code here
}

我认为图片没有理由不起作用,但出于某种原因它会发生。有什么想法吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

在第一个代码块(使用<input type="radio" .. />)中,表单只会回发culture的一个值(所选单选按钮的值)。

在第二个代码块中(使用<input type="image" .. />),您的表单会回发两个输入的值,因此您的表单数据为culture=en-US&culture=tr

DefaultModelBinder将绑定第一个值并忽略第二个值,因此POST方法中culture的值将始终为&#34; en-US&#34;无论您点击哪个图像。

一个选项是禁用其他输入(禁用的输入不会回发值,例如

$(".culture").click(function () {
    $(this).siblings().prop('disabled', true); // disable the other input
    $(this).parents("form").submit(); // post form
});

处理此问题的另一个选择是将<img>标记与文化值的隐藏输入结合使用

<input type="hidden" name="culture" id="culture"/>
<img src="~/Content/Images/en.png" data-culture="en-US" class="culture" />
<img src="~/Content/Images/tr.png" data-culture="tr" class="culture" />

$('.culture').click(function () {
    $('#culture').val($(this).data('culture')); // update the hidden input
    $('form').submit();
})