Asp.net-Mvc

接受逗號和點作為小數分隔符[重複]

  • January 18, 2013

ASP.NET MVC 中的模型綁定很棒,但它遵循區域設置。在我的語言環境中,小數點分隔符是逗號 (’,’),但使用者也使用點 (’.’),因為他們懶得切換佈局。我希望在一個地方為我的模型中的所有decimal欄位實現這一點。

我應該為類型實現我自己的值提供者(或事件模型綁定器)decimal還是我錯過了一些簡單的方法來做到這一點?

最乾淨的方法是實現自己的模型綁定器

public class DecimalModelBinder : DefaultModelBinder
{
   public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
   {
       var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

       return valueProviderResult == null ? base.BindModel(controllerContext, bindingContext) : Convert.ToDecimal(valueProviderResult.AttemptedValue);
       // of course replace with your custom conversion logic
   }    
}

並在 Application_Start() 中註冊它:

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

致謝:預設 ASP.NET MVC 3 模型綁定器不綁定小數屬性

引用自:https://stackoverflow.com/questions/14400643