簡體   English   中英

asp.net MVC數據模型驗證為double

[英]asp.net MVC data model validation on double

我正在我的asp.net MVC網站上使用datamodel驗證,我遇到了一個錯誤。

我的模型看起來像這樣:

public class MyModel{
  public String Name{get;set;}
  public double? Value {get;set;}
}

它在大多數情況下工作正常,但如果我在“值”字段中有一個小數值,如“5.5”,我得到了驗證錯誤。

該網站在“Fr-FR”區域設置下運行。 我試過“5.5”或“5,5”,它們都不起作用,但我得到了不同的信息:

La valeur '5.5' n'est pas valide pour Value.

這應該意味着"The value '5.5' isn't valide for Value"

Le champ Value doit être un nombre.

這意味着"The field Value has to be a number"

在我的代碼背后的唯一“邏輯是我在進行更新之前使用” ModelState.IsValid “。

為什么這不起作用,我該怎么做才能解決這個問題?

重要編輯通過調試我看到我的模型的字段在帶有小數的數字時變為“NULL”。

事實上,問題是客戶端驗證似乎適用於EN文化和具有fr-FR驗證的服務器。

所以我寫了一個簡單的modelBinder,它是文化不變量:

public class NullableDoubleModelBinder : 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.AttemptedValue != null)
        {
            try
            {
                actualValue = Convert.ToDouble(valueResult.AttemptedValue, CultureInfo.InvariantCulture);
            }
            catch (FormatException e)
            {
                modelState.Errors.Add(e);
            }
        }



        bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
        return actualValue;
    }
}

我在Global.asax文件中注冊它:

protected void Application_Start()
{
   //Other stuff
   ModelBinders.Binders.Add(typeof(double?), new NullableDoubleModelBinder());
}

現在它的工作原理:)

為了模仿你的錯誤我的模型看起來像

public class MyModel{
  public String Name{ get; set; }
  public int? Value { get; set; }
}

請檢查您的代碼並進行編輯,因為當int更改為double時 ,5.5將正常工作,除非您的控制器或模型中包含導致此驗證的其他代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM