Próbuję utworzyć wielojęzyczną aplikację MVC. Mam formularz w mojej aplikacji i mam pole do wpisania kosztów. Jestem w stanie stworzyć płytę wykorzystując hiszpańską kulturę.Jaki jest najlepszy sposób obsługi sprawdzania poprawności przy użyciu różnych kultur?
Ale przy próbie aktualizacji rekordu otrzymuję fałszywą walidację jQuery. i otrzymuję domyślny komunikat o błędzie:
The field must be numeric.
W moim modelu widoku ustawiłem następujące atrybuty.
[LocalizedDisplayName("Label_Cost")]
[RegularExpression("^[^<>,<|>]+$", ErrorMessage = null, ErrorMessageResourceName = "Error_Message_Html_Tags_Prevented", ErrorMessageResourceType = typeof(Resources))]
[Range(0, 9999.99, ErrorMessage = null, ErrorMessageResourceName = "Error_Message_Cost_Not_Valid", ErrorMessageResourceType = typeof(Resources))]
public decimal? Cost { get; set; }
mam ustawić w moim pliku Gobal.asax z następujących
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
try
{
HttpCookie cookie = HttpContext.Current.Request.Cookies.Get("CurrentCulture");
string culutureCode = cookie != null && !string.IsNullOrEmpty(cookie.Value) ? cookie.Value : "en";
CultureInfo ci = new CultureInfo(culutureCode);
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
System.Threading.Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(ci.Name);
}
catch(Exception ex)
{
// Code
}
}
i powyższa metoda działa zgodnie z oczekiwaniami po stronie serwera w zmianie kultury. Ale walidacja po stronie klienta łamie nie-angielskie kultury, ponieważ javascript rozpoznaje tylko cyfry dziesiętne. Chciałbym poznać najlepszy sposób na poszerzenie walidacji strony klienta mvc o walidację specyficzną dla kultury.
EDIT
Nawiązując do adresu Mike'a I dokonały następujących zmian w JS wiązki. Js wiązka jest następujący
public static void RegisterBundles(BundleCollection bundles)
{
BundleTable.EnableOptimizations = true;
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/globalisation").Include(
"~/Scripts/globalize.js",
"~/Scripts/globalize/currency.js",
"~/Scripts/globalize/date.js",
"~/Scripts/globalize/message.js",
"~/Scripts/globalize/number.js",
"~/Scripts/globalize/plural.js",
"~/Scripts/globalize/relative-time.js"));
bundles.Add(new ScriptBundle("~/bundles/globalisationEN").Include(
"~/Scripts/GlobalisationCulture/globalize.culture.en-AU.js"));
bundles.Add(new ScriptBundle("~/bundles/globalisationES").Include(
"~/Scripts/GlobalisationCulture/globalize.culture.es-AR.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryuiEN").Include(
"~/Scripts/jquery-ui-1.10.3.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryuiES").Include(
"~/Scripts/jquery-ui-1.10.3.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.validate.js",
"~/Scripts/jquery.validate.unobtrusive.js",
"~/Scripts/jquery.unobtrusive-ajax.js",
"~/Scripts/jquery.validate.globalize.js"));
}
Na stronie układu I wprowadziły następująco
HttpCookie cookie = HttpContext.Current.Request.Cookies.Get("CurrentCulture");
string culutureCode = cookie != null && !string.IsNullOrEmpty(cookie.Value) ? cookie.Value : "en";
if (culutureCode.Equals("en-AU", StringComparison.OrdinalIgnoreCase))
{
culutureCode = "EN";
}
else if (culutureCode.Equals("es-AR", StringComparison.OrdinalIgnoreCase))
{
culutureCode = "ES";
}
else
{
culutureCode = "EN";
}
@Scripts.Render("~/bundles/jquery",
"~/bundles/globalisation",
string.Format("~/bundles/globalisation{0}", culutureCode),
"~/bundles/jqueryval",
string.Format("~/bundles/jqueryui{0}", culutureCode))
Nie jestem osobiście dobry w informacji o kulturze, ale możesz chcieć wziąć to "catch", rozwinąć go, aby uwzględnić ogólny wyjątek, i napisać to do konsoli (w celu debugowania): 'catch (Exception err) {Console.WriteLine (err); } "Powodzenia! – jp2code
Czy zapoznałeś się z rozwiązaniem podanym w tym podobnym pytaniu: http://stackoverflow.com/questions/5199835/mvc-3-jquery-validation-globalizing-of-number-decimal-field –
Dlaczego, na Boga, opróżniłbyś- złapać wyjątki, a następnie poprosić o SO, aby to naprawić? –