hôm nay tôi đã nhầm lẫn khi thực hiện một vài số <%=Html.LabelFor(m=>m.MyProperty)%>
trong ASP.NET MVC 2 và sử dụng thuộc tính [DisplayName("Show this instead of MyProperty")]
từ System.ComponentModel
.Tự hỏi tại sao thuộc tính DisplayName bị bỏ qua trong LabelFor trên thuộc tính bị ghi đè
Khi nó bật ra, khi tôi đặt thuộc tính trên thuộc tính bị ghi đè, LabelFor dường như không nhận thấy nó.
Tuy nhiên, thuộc tính [Required]
hoạt động tốt trên thuộc tính bị ghi đè và thông báo lỗi được tạo thực sự sử dụng DisplayNameAttribute.
Đây là một số câu hỏi tầm thường, kịch bản thực tế hơn là tôi có một databasemodel tách biệt với viewmodel, nhưng để thuận tiện, tôi muốn kế thừa từ databasemodel, thêm thuộc tính chỉ xem và trang trí viewmodel với thuộc tính cho giao diện người dùng.
public class POCOWithoutDataAnnotations
{
public virtual string PleaseOverrideMe { get; set; }
}
public class EditModel : POCOWithoutDataAnnotations
{
[Required]
[DisplayName("This should be as label for please override me!")]
public override string PleaseOverrideMe
{
get { return base.PleaseOverrideMe; }
set { base.PleaseOverrideMe = value; }
}
[Required]
[DisplayName("This property exists only in EditModel")]
public string NonOverriddenProp { get; set; }
}
Các mạnh mẽ gõ ViewPage<EditModel>
chứa:
<div class="editor-label">
<%= Html.LabelFor(model => model.PleaseOverrideMe) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.PleaseOverrideMe) %>
<%= Html.ValidationMessageFor(model => model.PleaseOverrideMe) %>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.NonOverriddenProp) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.NonOverriddenProp) %>
<%= Html.ValidationMessageFor(model => model.NonOverriddenProp) %>
</div>
Các nhãn này sau đó được hiển thị như "PleaseOverrideMe" (không sử dụng DisplayNameAttribute) và "Khách sạn này chỉ tồn tại trong EditModel" (sử dụng DisplayNameAttribute) khi xem trang.
Nếu tôi đăng với các giá trị rỗng, gây ra xác nhận với ActionMethod này:
[HttpPost]
public ActionResult Edit(EditModel model)
{
if (!ModelState.IsValid)
return View(model);
return View("Thanks");
}
các <%= Html.ValidationMessageFor(model => model.PleaseOverrideMe) %>
thực sự sử dụng [DisplayName("This should be as label for please override me!")]
thuộc tính, và tạo ra mặc định errortext "Các này nên càng nhãn cho xin vui lòng ghi đè tôi lĩnh vực là! cần thiết."
Một số linh hồn thân thiện có thể làm sáng tỏ điều này không?
Lasse, bạn có bất kỳ may mắn trong thời gian chuyển tiếp? –
Nếu bạn đang sử dụng sự phản chiếu để hiển thị tất cả các thuộc tính của bạn, bạn có kiểu 'ModelMetadata' có sẵn cho bạn. Về cơ bản bạn sẽ làm điều này 'Html.Label (prop.GetDisplayName())'. –