Tôi đang cố gắng xây dựng một ứng dụng MVC đa ngôn ngữ là gì. Tôi có một mẫu đơn trong đơn đăng ký của mình và tôi có trường để nhập chi phí. Tôi có thể tạo ra một bản ghi sử dụng văn hóa Tây Ban Nha.Cách tốt nhất để xử lý xác thực với văn hóa khác nhau
Nhưng khi cố gắng cập nhật bản ghi, tôi nhận được xác thực jquery sai. và tôi nhận được thông báo lỗi mặc định là:
The field must be numeric.
Trong mô hình chế độ xem của tôi, tôi đã đặt các thuộc tính sau.
[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; }
tôi đã thiết lập trong file Gobal.asax tôi với sau
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
}
}
và các phương pháp trên làm việc như mong đợi ở phía máy chủ trong việc thay đổi văn hóa. Tuy nhiên, xác thực bên ứng dụng khách phá vỡ trên nền văn hóa không phải tiếng Anh vì javascript chỉ nhận ra các chữ số thập phân. Tôi muốn biết cách tốt nhất để mở rộng xác thực phía máy khách mvc với xác thực văn hóa cụ thể.
EDIT
Với tham chiếu đến url của Mike Tôi đã thực hiện những thay đổi về Js bó sau. Js bó như sau
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"));
}
Trong trang bố trí tôi đã thực hiện như sau
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))
Tôi không giỏi về thông tin Văn hóa, nhưng bạn có thể muốn lấy 'catch', mở rộng nó để bao gồm ngoại lệ chung và ghi vào bàn điều khiển (cho mục đích gỡ lỗi):' catch (Exception err) {Console.WriteLine (err); } 'Chúc may mắn! – jp2code
Bạn đã xem xét giải pháp được đưa ra trong câu hỏi tương tự này: http://stackoverflow.com/questions/5199835/mvc-3-jquery-validation-globalizing-of-number-decimal-field –
Tại sao bạn lại để trống bắt ngoại lệ và sau đó yêu cầu SO sửa lỗi này? –