【问题标题】:How do I make globalization work with MVC2 and jquery?如何使全球化与 MVC2 和 jquery 一起工作?
【发布时间】:2025-11-21 10:15:01
【问题描述】:

我正在 asp.net mvc2 应用程序中尝试一些全球化,但无法使其充分发挥作用。我正在使用库http://github.com/nje/jquery-glob 作为根据用户意愿显示货币和日期等的工具。然而,有些事情让我有点困扰。 IU 无法让客户端/服务器端验证以实际接受使用 jQuery 的全球化。无论我尝试什么,如果我发回 40.00 一切正常,但如果我发布 40,00,它被接受为 0(不是有效的 .NET 不变十进制值)。我试着关注@haackedguide

这在 global.asax 中用于服务器端处理:

private void SetCulture(string currencySymbol)
{
    AjaxHelper.GlobalizationScriptPath = 
        http://ajax.microsoft.com/ajax/4.0/1/globalization/";

    var culturePref = "sv-SE";
    var request = HttpContext.Current.Request;

    if (request.UserLanguages == null)
        return;

    var lang = request.UserLanguages[0];
    if (lang != null) {
        try {
            Thread.CurrentThread.CurrentCulture =
                CultureInfo.CreateSpecificCulture(lang);
        }
        catch {
            Thread.CurrentThread.CurrentCulture = 
                new CultureInfo(culturePref);
        }
    }

    Thread.CurrentThread.CurrentUICulture = 
        Thread.CurrentThread.CurrentCulture;
}

然后在客户端我包含了以下脚本:

<script src="/Scripts/jquery-1.4.2.js" type="text/javascript"></script>
<script src="/Scripts/jquery.glob.js" type="text/javascript"></script>
<script src="/Scripts/globinfo/jquery.glob.sv-SE.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $.culture = jQuery.cultures['sv-SE'];
        $.preferCulture('sv-SE');
    });
</script>
<script src="/Scripts/jquery.validate.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.pack.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script>
<script src="/Scripts/jquery.metadata.js" type="text/javascript"></script>

到目前为止一切都很好,但作用不大。不要误会我的意思,我仍然可以在客户端使用它,但在服务器端并没有真正发生任何事情。下面的 jQuery 相应地更改了格式,但是当我回发 40,00 时,它变成了 0.00。

function globalizePage(culture) {
    // Set culture from select list
    $.preferCulture(culture);

    $("input[id$='Date']").val(function () {
        var dateString = $(this).val();
        var date = Date.parse(dateString);
        var dt = $.format(date, 'd', culture.name);
        return dt;
    });

    $("input[id$='Price']").val(function () {
        var price = $.parseInt($(this).val());
        var retVal = $.format(price, 'c', culture.name);
        return retVal;
    });
}

我需要做什么才能使上面的代码工作?

【问题讨论】:

    标签: asp.net-mvc-2 globalization jquery-globalization


    【解决方案1】:

    问题解决了,培根保存或炸鸡。发生这种情况的原因是 jquery.validate 和 jquery.glob 使用一个名为“format”的函数,如果在 glob 之后添加了 validate ,那么调用 validate.format 函数会破坏全球化。另一方面验证功能。我不知道 javascript 或 jquery 足以告诉你任何解决方法。我将手动对表单的验证进行编码并忘记 MicrosoftMVCjQueryValidation,因为这不符合验证插件的公正性。

    <script src="https://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js" type="text/javascript"></script>
    <script src="https://ajax.microsoft.com/ajax/jQuery.Validate/1.7/jQuery.Validate.min.js" type="text/javascript"></script>
    <script src="/Scripts/jquery.glob.js" type="text/javascript"></script>
    <script src="/Scripts/globinfo/jquery.glob.sv-SE.js" type="text/javascript"></script>
    <script src="/Scripts/jquery.forms.js" type="text/javascript"></script>
    

    【讨论】:

      最近更新 更多