2011-08-09 29 views
8

Tôi đang phát triển một trang web trong ASP.NET MVC 3.Parse thập phân theo quan điểm mô hình

tài sản

[DisplayName("Cost"), DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)] 
public decimal Cost { get; set; } 

Xem

@Html.EditorFor(x => x.Cost) 

Quan điểm làm cho chi phí như 1000,00 (ví dụ). Vấn đề là, xác nhận yêu cầu một điểm thay vì dấu phẩy. Làm thế nào tôi có thể xuất 1000,00 thay vì 1000,00? Hoặc đảo ngược xác thực để chấp nhận dấu phẩy thay vì một điểm?

Chỉnh sửa. Tôi đã thiết lập toàn cầu hóa trong web.config của tôi thành sv-SE (Thụy Điển).

Trả lời

10

Bạn sẽ cần phải viết một mô hình tùy chỉnh chất kết dính để làm điều này.

/// <summary> 
/// http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx 
/// </summary> 
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 
     { 
      actualValue = Convert.ToDecimal(valueResult.AttemptedValue, 
       CultureInfo.CurrentCulture); 
     } 
     catch (FormatException e) 
     { 
      modelState.Errors.Add(e); 
     } 

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

Trong file Global.asax của bạn, thêm dòng sau vào Application_Start Phương pháp của bạn

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

Cảm ơn snipet! Làm việc như một say mê. Tôi đã gặp rắc rối với các giá trị gấp đôi so với số thập phân và đang sử dụng thuộc tính DisplayFormat (ApplyFormatInEditMode = true, DataFormatString = "{0: #, 0}")] sẽ định dạng tăng gấp đôi so với tiền tệ không có số thập phân. Cảm thấy một chút ngớ ngẩn khuôn khổ là không xử lý các mặc định mặc dù. –

0

Bạn không chỉ thay đổi DataFormatString sao cho nó định dạng số bằng một điểm, ví dụ: {0: 0,00} hoặc tương tự?

+0

Định dạng nó không phải là vấn đề, đó là xác nhận rằng sẽ thất bại – clyc

Các vấn đề liên quan