Tôi tự hỏi sự khác biệt là gì giữa ValueFor
, mà tôi không biết cho đến gần đây và DisplayFor
, mà tôi đã sử dụng để hiển thị các giá trị.Sự khác biệt giữa DisplayFor và ValueFor
tôi thiết lập một dự án thử nghiệm, trong đó tôi tạo ra một mô hình với 2 thuộc tính:
public class TestModel
{
[Display(Name = "Montant")]
[DisplayFormat(DataFormatString = "{0:C2}")]
public Decimal Amount
{
get;
set;
}
[Display(Name = "Date d'achat")]
[DataType(DataType.Date)]
public DateTime Date
{
get;
set;
}
}
Dưới đây là kết quả tôi nhận được:
TestModel model = new TestModel
{
Amount = 1234.333M,
Date = DateTime.Today.AddDays(-10)
};
@Html.DisplayFor(x => x.Amout) => "1 234,33 €"
@Html.ValueFor(x => x.Amount) => "1234,333"
@Html.DisplayFor(x => x.Date) => "23/03/2014"
@Html.ValueFor(x => x.Date) => "23/03/2014 00:00:00"
Từ những gì tôi nhìn thấy, không có lợi thế sử dụng ValueFor
thay vì @Model.PropertyName
Khi tìm kiếm câu trả lời, tôi tình cờ gặp this question câu trả lời được trả lời nhiều nhất, wh ile không bình chọn câu trả lời hay nhất, cho kết quả khác với tôi.
Bất kỳ ai cũng biết lý do chúng tôi nhận được kết quả khác nhau và việc sử dụng thực sự sử dụng số ValueFor
là gì?
Làm thế nào bạn có thể giải thích rằng siêu dữ liệu ('DataType' và' DisplayFormat') không được sử dụng ** ở tất cả ** khi tôi sử dụng 'ValueFor' sau đó? –
@mickaeld mặc dù nguồn cho biết nó * nên * đang sử dụng siêu dữ liệu - thực tế là nó không có. Nếu bạn đi theo đường dẫn nguồn, nó gọi 'HtmlHelper.FormatValue' mà nội bộ gọi là' ViewDataDictionary.FormatValueInternal' mà lần lượt chỉ gọi 'Convert.ToString' hoặc' String.Format' tùy thuộc vào việc bạn có cung cấp tham số định dạng tùy chỉnh hay không. Tôi đã sửa đổi câu trả lời của mình – James
@mickaeld: Bạn chỉ nên sử dụng ValueFor nếu bạn đang xây dựng các tiện ích trợ giúp HTML của riêng mình. –