Как заставить глобализацию работать с MVC2 и jquery? - PullRequest
5 голосов
/ 15 августа 2010

Я пробую некоторую глобализацию в приложении asp.net mvc2, но не могу заставить его работать полностью.Я использую библиотеку http://github.com/nje/jquery-glob в качестве инструмента для отображения валюты и дат и т. Д. В соответствии с пожеланиями пользователя.Однако что-то меня немного беспокоит.IU не может получить проверку на стороне клиента / сервера для фактического принятия глобализации с использованием jQuery.Независимо от того, что я пробую, если я отправляю обратно 40.00, все работает нормально, но если я отправляю 40,00, оно принимается как 0 (не допустимое десятичное значение инварианта .NET).Я пытался следовать @ haacked guide

Это в 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;
    });
}

Что мне нужно сделать, чтобы этот код работал?

1 Ответ

3 голосов
/ 25 августа 2010

Проблема решена, бекон сохранен или курица жареная.Причина, по которой это происходит, заключается в том, что jquery.validate и jquery.glob используют функцию под названием «format», если validate добавляется после glob, то вызывается функция 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>
...