Как получить аннотацию данных GroupName из ModelMetadata

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?

5
задан David Keaveny 21 February 2012 в 23:34
поделиться