相关疑难解决方法(0)

Fluent Validation不接受带有千位分隔符的数字

我有一个使用Fluent Validation for MVC 5的ASP.NET MVC 5项目.我还使用jQuery masking插件自动添加数千个双值.

在模型中我有:

    [Display(Name = "Turnover")]
    [DisplayFormat(ApplyFormatInEditMode = true,ConvertEmptyStringToNull =true,DataFormatString ="#,##0")]
    public double? Turnover { get; set; }
Run Code Online (Sandbox Code Playgroud)

在视图中我有:

<th class="col-xs-2">
    @Html.DisplayNameFor(model=>model.Turnover)
</th>
<td class="col-xs-4">
    @Html.TextBoxFor(model => model.Turnover, new { @class = "form-control number", placeholder="Enter number. Thousands added automatically" })
</td>
<td class="col-xs-6">
    @Html.ValidationMessageFor(model => model.Turnover, "", new { @class = "text-danger" })
</td>
Run Code Online (Sandbox Code Playgroud)

为包含模型定义了一个流畅的验证器,但它不包含任何规则.我只使用服务器端验证.

public class MyModelValidator: AbstractValidator<MyModel>
{
    public MyModelValidator()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我得到了营业额的验证错误如下: 在此输入图像描述

我尝试使用模型绑定来解决这个问题.但是模型绑定器的断点永远不会受到打击 - 流畅的验证似乎阻止了达到模型绑定器的价值.

c# asp.net-mvc fluentvalidation

11
推荐指数
1
解决办法
1110
查看次数

具有全局数字格式的ASP.NET MVC模型绑定器

当我的应用程序在使用不同数字格式的小数(例如1.2 = 1,2)的国家/地区使用时,默认模型绑定器会返回类型为double的属性的错误.网站的文化是在我的BaseController中有条件地设置的.

我已经尝试添加自定义模型绑定器并覆盖bindModel函数但我无法看到如何解决错误,因为Culture已经设置回默认的en-GB.

所以我尝试在我的BaseController中添加一个动作过滤器来设置Culture,但不幸的是bindModel似乎在我的动作过滤器之前被触发了.

我怎么能绕过这个?要么让文化不重置自己,要么在bindModel启动之前将其设置回来?

模型进入无效的控制器:

public ActionResult Save(MyModel myModel)
{
    if (ModelState.IsValid)
    {
        // Save my model
    }
    else
    {
       // Raise error
    }
}
Run Code Online (Sandbox Code Playgroud)

筛选文化设置:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    CultureInfo culture = createCulture(filterContext);

    if (culture != null)
    {
         Thread.CurrentThread.CurrentCulture = culture;
         Thread.CurrentThread.CurrentUICulture = culture;
    }

    base.OnActionExecuting(filterContext);
}
Run Code Online (Sandbox Code Playgroud)

自定义模型粘合剂:

public class InternationalDoubleModelBinder : DefaultModelBinder
{
   public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
   {
       ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
       if (valueResult != null)
       {
           if (bindingContext.ModelType == typeof(double) …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc localization model number-formatting custom-model-binder

9
推荐指数
1
解决办法
3226
查看次数