DisplayAttribute в System.ComponentModel.DataAnnotations имеет свойство GroupName, которое позволяет логически группировать поля вместе в элементе управления пользовательского интерфейса (например, сетка свойств в WPF / WinForms).
Я пытаюсь получить доступ к этим метаданным в приложении ASP.NET MVC3, по сути, для создания сетки свойств. Если моя модель выглядит так:
public class Customer
{
[ReadOnly]
public int Id { get;set; }
[Display(Name = "Name", Description = "Customer's name", GroupName = "Basic")]
[Required(ErrorMessage = "Please enter the customer's name")]
[StringLength(255)]
public string Name { get;set; }
[Display(Name = "Email", Description = "Customer's primary email address", GroupName = "Basic")]
[Required]
[StringLength(255)]
[DataType(DataType.Email)]
public string EmailAddress { get;set; }
[Display(Name = "Last Order", Description = "The date when the customer last placed an order", GroupName = "Status")]
public DateTime LastOrderPlaced { get;set; }
[Display(Name = "Locked", Description = "Whether the customer account is locked", GroupName = "Status")]
public bool IsLocked { get;set; }
}
, а мое представление выглядит следующим образом:
@model Customer
<div class="edit-customer">
@foreach (var property in ViewData.ModelMetadata.Properties.Where(p => !p.IsReadOnly).OrderBy(p => p.Order))
{
<div class="editor-row">
@Html.DevExpress().Label(settings =>
{
settings.AssociatedControlName = property.PropertyName;
settings.Text = property.DisplayName;
settings.ToolTip = property.Description;
}).GetHtml()
<span class="editor-field">
@Html.DevExpress().TextBox(settings =>
{
settings.Name = property.PropertyName;
settings.Properties.NullText = property.Watermark;
settings.Width = 200;
settings.Properties.ValidationSettings.RequiredField.IsRequired = property.IsRequired;
settings.ShowModelErrors = true;
}).Bind(ViewData[property.PropertyName]).GetHtml()
</span>
</div>
}
</div>
, тогда форма очень хорошо разложена на основе метаданных, с метаданными, всплывающими подсказками, водяными знаками и т. Д., Извлеченными из метаданных модели; но , я хотел бы иметь возможность группировать элементы вместе, например, в
для каждой группы. Кто-нибудь знает, как получить GroupName из метаданных, если не писать метод расширения для ModelMetadata?