Я пытаюсь провести проверку на стороне клиента (привязку модели) для поддержки различных культур и нашел интересный блог на эту тему, которую я пытаюсь внедрить.
http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx
Poco
public class Jogador
{
public int ID { get; set; }
public string Name { get; set; }
public decimal Salary { get; set; }
}
У меня есть собственный класс DecimalModelBinder
public class DecimalModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
ModelState modelState = new ModelState {Value = valueResult};
object actualValue = null;
try
{
actualValue = Convert.ToDecimal(valueResult.AttemptedValue, CultureInfo.CurrentCulture);
}
catch (FormatException e)
{
modelState.Errors.Add(e);
}
bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
return actualValue;
}
}
Мой web.config :
Global.asax изменен для использования моего пользовательского ModelBinder в десятичном и десятичном формате? values
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Тем не менее, проверка на стороне клиента завершается ошибкой для десятичного числа, введенного в моем представлении с "," в качестве десятичного разделителя. Он не обрабатывает как «,», так и «.». Проверка js, похоже, не принимает во внимание мою пользовательскую привязку.
Перечитывая статью в блоге снова и снова, я просто не могу понять, что мне не хватает.
Вот мнение:
@model MVC_Empty.Web.Models.Jogador
@{
ViewBag.Title = "Create";
}
Create
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
}
@Html.ActionLink("Back to List", "Index")
Проверка на стороне сервера выглядит нормально, но как обрабатывать проверку на стороне клиента, чтобы отправлять POST при нажатии кнопки отправки.
Проверка JavaScript не обрабатывает запятую.