Tôi có một thuộc tính của mô hình của tôi có kiểu gấp đôi. Một trong các mục của tôi có giá trị là 0.000028, nhưng khi chế độ xem chỉnh sửa của tôi được hiển thị, trình chỉnh sửa cho giá trị này hiển thị là 2,8e-005.Trình soạn thảo MVC3 Đối với Double hiển thị ký hiệu khoa học
Bên cạnh này là khó hiểu cho người dùng của tôi, nó cũng không xác nhận biểu hiện thường xuyên của tôi về
[Display(Name = "Neck Dimension")]
[RegularExpression(@"[0-9]*\.?[0-9]+", ErrorMessage = "Neck Dimension must be a Number")]
[Range(0, 9999.99, ErrorMessage = "Value must be between 0 - 9,999.99")]
[Required(ErrorMessage = "The Neck Dimension is required.")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:F20}")]
public double? NeckDimension { get; set; }
Làm thế nào để có được lĩnh vực này để hiển thị? Tôi đã có bit này của mã (hiển thị dưới đây) mà sẽ làm cho một số thập phân như tôi muốn, nhưng tôi không chắc chắn nơi để thực hiện nó.
var dbltest = 0.000028D;
Console.WriteLine(String.Format("{0:F20}", dbltest).TrimEnd('0'));
Tôi sử dụng thuộc tính NeckDimension ở hai vị trí và chỉnh sửa chế độ xem và chế độ xem hiển thị. Dưới đây là cách chúng được hiển thị.
@Html.TextBoxFor(model => model.NeckDimension, new { style = "width:75px;" })
@Html.DisplayFor(model => model.NeckHDimension)
CẬP NHẬT Rõ ràng DisplayFormat sẽ không làm việc với TextBoxFor. Tôi đã cố gắng thay đổi @ Html.TextBoxFor thành Html.EditorFor và cấp cho nó một lớp nhưng không thành công với ngoại lệ sau.
The model item passed into the dictionary is of type 'System.Double', but this dictionary requires a model item of type 'System.String'
mã cũ này vẫn hoạt động:
@Html.TextBoxFor(model => model.NeckDimension, new { style = "width:75px;" })
Mã này đã đưa ra ngoại lệ:
@Html.EditorFor(model => model.NeckDimension, new {@class = "formatteddecimal"})
Dường như lựa chọn của tôi là sửa lỗi này với javascript hoặc sửa chữa nó với một mẫu biên tập viên nhưng tôi không có thời gian để nghiên cứu và tìm hiểu tùy chọn thứ 2 vào thời điểm này.
SOLUTION:
Tôi tạo ra một mẫu biên tập viên cho đôi? như sau.
@model double?
@{
var ti = ViewData.TemplateInfo;
var displayValue = string.Empty;
if (Model.HasValue) {
displayValue = String.Format("{0:F20}", @Model.Value).TrimEnd('0');
}
<input id="@ti.GetFullHtmlFieldId(string.Empty)" name="@ti.GetFullHtmlFieldName(string.Empty)" type="text" value="@displayValue" />
}
Tôi thích cách tiếp cận của @Darin Dimitrov khi sử dụng trình trang trí DisplayFormat, nhưng nó không hoạt động trong trường hợp của tôi. Tôi không chắc liệu một trong những người trang trí khác có đang ném nó đi không, nhưng tôi vẫn cần một giải pháp hoạt động. –