MVC3模型验证不工作在双

本文关键字:工作 模型 验证 MVC3 | 更新日期: 2023-09-27 17:52:17

我在MVC中有一个验证问题,我的模型有一个双重属性,当我提交10.30或任何带有"."的东西时,它告诉我"值'10.30'对价格无效"。我做了一些研究,他们说模型验证应该是文化不变的,我想这可能是问题,因为我的浏览器和服务器是法语的,但它不应该。

下面是我的代码:

[HttpPost]
        [ValidateAntiForgeryToken]
        [Authorize(Roles = "Admin")]
        [ValidateInput(false)]
        public virtual ActionResult Edit(AuctionModel model)
        {
            if (ModelState.IsValid)
            {
                //do the work
            }
            return View(model);
        }
public class AuctionModel
    {
        public string Id { get; set; }
        [Required(ErrorMessageResourceType = typeof(Strings), ErrorMessageResourceName = "FieldMandatory")]
        [LocalizedDisplayName("Title")]
        public string Title { get; set; }
        [Required(ErrorMessageResourceType = typeof(Strings), ErrorMessageResourceName = "FieldMandatory")]
        [LocalizedDisplayName("Description")]
        public string Description { get; set; }
        [Required(ErrorMessageResourceType = typeof(Strings), ErrorMessageResourceName = "FieldMandatory")]
        [LocalizedDisplayName("Photo")]
        public string Photo { get; set; }
        [Required(ErrorMessageResourceType = typeof(Strings), ErrorMessageResourceName = "FieldMandatory")]
        [LocalizedDisplayName("StartDate")]
        public DateTime StartDate { get; set; }
        [Required(ErrorMessageResourceType = typeof(Strings), ErrorMessageResourceName = "FieldMandatory")]
        [LocalizedDisplayName("Price")]
        public double Price { get; set; }
}

谢谢你的帮助!

MVC3模型验证不工作在双

最后我关注了hackack的这篇文章:

http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx

它工作得很好。

代码如下:

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        var modelState = new ModelState { Value = valueResult };
        object actualValue = null;
        try
        {
            actualValue = Convert.ToDecimal(valueResult.AttemptedValue, CultureInfo.InvariantCulture);
        }
        catch (FormatException e)
        {
            modelState.Errors.Add(e);
        }
        bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
        return actualValue;
    }

在全局。ascx:

ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());

尝试在onactionexecution中设置区域性。

顺便说一句,我找到了另一个点。

public class CultureModelBinder : DefaultModelBinder
 {      
        public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = yourCulture;
        }
}