ASP.NET中的验证错误

时间:2015-01-23 14:11:00

标签: c# asp.net

我有一个实体:

public class Book
{
public int BookID{get; set;}
public string BookName{get; set;}
public int Price {get; set;}
}

我自行搭建并创建了Controller和Views。然后我将我的实体改为:

public class Book
{
public int BookID{get; set;}
public string BookName{get; set;}
public double Price {get; set;}
}

我复制了我的项目,然后删除了控制器和视图,并自动重新创建它们。然后复制旧控制器和视图的内容。现在,当我输入18.75时,我得到了" 18.75'对价格无效。"错误。我该如何解决这种情况?感谢。

2 个答案:

答案 0 :(得分:1)

如果服务器上的文化使用逗号处理十进制数,您还需要告诉jQuery验证它应该使用逗号作为十进制分隔符。您可以查看this blog-post(有点旧,但有些东西仍然可以使用),以获得处理文化的一般方法。这里的代码具有魔力:

$(document).ready(function () {
    //Ask ASP.NET what culture we prefer, because we stuck it in a meta tag
    var data = $("meta[name='accept-language']").attr("content")
    //Tell jQuery to figure it out also on the client side.
    $.global.preferCulture(data);

    //Tell the validator, for example,
    // that we want numbers parsed a certain way!
    $.validator.methods.number = function (value, element) {
        if ($.global.parseFloat(value)) {
            return true;
        }
        return false;
    }
});

请注意,jQuery全球化插件的链接已经失效。 It has been moved

基本上你必须覆盖默认的数字验证。我知道这很糟糕但我必须找到一个像这个一样干净的方法。

答案 1 :(得分:1)

总之。我在此期间通过使用我自己的十进制处理程序处理十进制输入(大部分)独立于区域设置来避免这种情况:

    启动/ FilterConfig.cs中的
  1. ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
    
  2. 新类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 = GeneralHelper.ToDecimal(valueResult.AttemptedValue);
        }
        catch (FormatException e)
        {
            modelState.Errors.Add(e);
        }
    
        bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
        return actualValue;
      }
    }
    

    函数GeneralHelper.ToDecimal()基于以下博客条目:https://sreindl.wordpress.com/2013/10/26/i18n-parsing-decimal-values/