我正在努力使用ASP .NET MVC 3不引人注目的验证。我的简单模型包含此字段:
[Display(Name = "Starting Amount")]
[Required(ErrorMessage = "Starting Amount is required.")]
public decimal? StartAmount { get; set; }
我正在使用一些自动格式化货币和数字的jQuery插件,因此StartAmount字段以美元符号($)为前缀。这个字段的客户端验证应该摆脱这个美元符号,所以我扩展了jQuery验证器:
$.validator.methods.number = function (value, element) {
return true;
}
这解决了美元符号的问题,但现在验证对于必需规则失败。当输入字段为空时,没有“需要启动金额字段”。消息显示。我有什么想法吗?
提前致谢!
答案 0 :(得分:1)
不要对jQuery验证器进行任何更改。您需要做的是为decimal
类型定义一个自定义模型绑定器,如下所示:
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;
if (valueResult != null && !string.IsNullOrEmpty(valueResult.AttemptedValue))
{
try
{
actualValue = decimal.Parse(valueResult.AttemptedValue, NumberStyles.Currency, CultureInfo.CurrentCulture);
}
catch (FormatException e)
{
modelState.Errors.Add(e);
}
bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
}
return actualValue;
}
}
然后,在Application_Start
的{{1}}事件中,注册您的自定义模型绑定器,如下所示:
Global.asax
您可以在此处详细了解NumberStyles: NumberStyles Enumeration