2013-09-26 18 views
0

我有這樣一個類:Asp.net MVC 4獲得十進制值,而不是整數

public class Item 
{ 
    public int ItemID { get; set; } 

    [Display(Name = "Value")] 
    [Column(TypeName = "money")] 
    public decimal Value{ get; set; } 
} 

在我進入12.50和在我的崗位操作的對象已Item.Value = 1250時,應該有12.50的形式,如何解決這個問題?

操作方法:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create(Item item) 
{ 
    ...code... 
} 

查看:「字段華萊必須是一個數字」

<div class="editor-label"> 
    @Html.LabelFor(model => model.Value) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.Value) 
    @Html.ValidationMessageFor(model => model.Value) 
</div> 

當類型12驗證客戶端說然而,讓我執行12後的行動方法,說同樣的事情,但不要讓我。

+0

動作方法在哪裏?相關的客戶端代碼在哪裏? – xandercoded

+1

只是要知道,如果你試圖插入12,50(逗號)會發生什麼? –

+0

客戶端驗證不會讓我。讓我插入'。' – weldsonandrade

回答

2

我解決了定製綁定感謝菲爾哈克(http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx):我在下面的帖子說明這一點。我修改DecimalModelBind類:

public class DecimalModelBinder : IModelBinder 
    { 
     public object BindModel(ControllerContext controllerContext, 
     ModelBindingContext bindingContext) 
     { 
      ValueProviderResult valueResult = bindingContext.ValueProvider 
       .GetValue(bindingContext.ModelName); 
      ModelState modelState = new ModelState { Value = valueResult }; 
      object actualValue = null; 
      try 
      { 
       var value = valueResult.AttemptedValue.Replace('.', ','); 
       actualValue = Convert.ToDecimal(value, 
        CultureInfo.CurrentCulture); 
      } 
      catch (FormatException e) 
      { 
       modelState.Errors.Add(e); 
      } 
      if (bindingContext.ModelState[bindingContext.ModelName] == null) 
      { 
       bindingContext.ModelState.Add(bindingContext.ModelName, modelState); 
      } 
      return actualValue; 
     } 
    } 

我添加這些行:

var value = valueResult.AttemptedValue.Replace('.', ','); 
if (bindingContext.ModelState[bindingContext.ModelName] == null) 

第一個通過更換 '' ''。第二個檢查是否沒有避免異常的具有相同名稱的ModelState。

0

嘗試在服務器上指定一個文化,將使用.作爲小數點分隔符,如:

<globalization uiCulture="en-US" culture="en-US" /> 

另外,如果你想使用auto文化(即推斷客戶端瀏覽器設置和Accept-Language請求頭)那麼您可以爲小數類型編寫自定義模型綁定器,並使用[DisplayFormat]屬性明確設置所需的格式。 https://stackoverflow.com/a/11272982/29407(它是DateTime類型,但你可以很輕鬆適應了decimal類型的例子也一樣)

+0

不起作用,還有一件事我忘記說當我輸入'。'時。在現場驗證客戶端說'字段值必須是一個數字'。但是在輸入12.50時,他會通過並執行發帖後的動作,但是12,50不會讓我執行發帖後的動作,但請說出相同的消息'字段值必須是數字。 – weldsonandrade

相關問題