[英]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.