2013-05-13 68 views
1

我有他的代碼。 部分視圖。DataAnnotation十進制數的DisplayFormat

<div class="input width110"> 
    @Html.EditorFor(x => x.Price, @Html.Attributes(@class: "right_text_align", @disabled: "true", @id: "Price")) 
</div> 

模型。

public class ServiceModel 
{ 
[DisplayFormat(DataFormatString = "{0:0.00}", ApplyFormatInEditMode = true)] 
public decimal Price { get; set; } 
} 

控制器

public ActionResult SetService(ServiceModel model, string action) 
{ 

      if (ModelState.IsValid) 
      { 
       /*Does smthg.*/ 
       ModelState.Clear(); 
      } 

     return View("Index", rcpModel); 
     //Index is main view, which holds partialView 
     //rcpModel holds, model 
} 

當視圖負載十進制顯示在格式 「0.00」。但是postState後的modelState無效時,數字格式顯示爲「0.0000」。如果模型狀態無效,則一切順利。有沒有人遇到類似的東西?

+0

您是否將其他值添加到值中?如果您有一個JavaScript插件添加逗號,那麼默認綁定器將不起作用 – amhed 2013-05-14 13:27:14

+0

yes @amhed,我使用jQuery Globalize,因爲我的本機格式爲「0,00」。後來我嘗試驗證它是否真的是粘合劑問題。 – lew 2013-05-16 07:37:43

回答

1

如果您有JavaScript修改文本框(貨幣格式或逗號)上的值,那麼您可能會得到綁定錯誤,因爲它將表現爲字符串。試試這個:

創建BindingProperty爲十進制值

public class DecimalModelBinder : IModelBinder 
{ 
    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.CurrentCulture); 
     } 
     catch (FormatException e) 
     { 
      modelState.Errors.Add(e); 
     } 

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

在您的Global.asax app_start或WebActivator.PostApplicationStartMethod添加一個條目來註冊定製綁定:

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

要顯示點而不是逗號就足以在調用視圖之前使用的代碼的每個點將文化更改爲英語。

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("En"); 
相關問題