StringLengthAttribute - PullRequest
       2

StringLengthAttribute

0 голосов
/ 02 ноября 2010

Я использую Asp.Net MVC 2 и пытаюсь перебрать метаданные, чтобы добавить элементы управления вводом в столбцы сетки.Большинство атрибутов, таких как DisplayAttribute, StringLength и т. Д., Не заполняются поставщиком метаданных модели по умолчанию.

1 - я думаю, что эти атрибуты будут поддерживаться в MVC3, верно?

2 - есть липользовательский поставщик, который я могу использовать до выхода MVC3, я помню, как видел пользовательский поставщик метаданных (думал, что это было в MVCContrib), но не смог найти его там, кто-нибудь знает, где найти метадатчик, поддерживающий эти атрибуты?

1 Ответ

0 голосов
/ 02 ноября 2010

Я написал провайдера для обработки большего количества атрибутов, чем стандартный провайдер. Вот идея:

/// <summary>
/// Adds support for data annotation attributes omitted from DataAnnotationsModelMetadataProvider
/// </summary>
public class ExtendedDataAnnotationsModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
    protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
    {
        var result = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);

        DisplayAttribute da = attributes.OfType<DisplayAttribute>().FirstOrDefault();
        if (da != null)
        {
            var autoGenerate = da.GetAutoGenerateFilter();
            if (autoGenerate.HasValue)
            {
                result.AdditionalValues[AdditionalValuesKeys.AutoGenerateFilter] = autoGenerate.Value;
            }
            var groupName = da.GroupName;
            if (!string.IsNullOrEmpty(groupName))
            {
                result.AdditionalValues[AdditionalValuesKeys.GroupName] = groupName;
            }
            if (!string.IsNullOrEmpty(da.Prompt))
            {
                result.Watermark = da.Prompt;
            }
        }

        DisplayColumnAttribute dc = attributes.OfType<DisplayColumnAttribute>().FirstOrDefault();
        if (dc != null)
        {
            var sc = dc.SortColumn;
            if (!string.IsNullOrEmpty(sc))
            {
                result.AdditionalValues[AdditionalValuesKeys.SortColumnName] = sc;
                if (dc.SortDescending)
                {
                    result.AdditionalValues[AdditionalValuesKeys.SortDescending] = true;
                }
            }
        }

        StringLengthAttribute sla = attributes.OfType<StringLengthAttribute>().FirstOrDefault();
        if (sla != null)
        {
            result.AdditionalValues[AdditionalValuesKeys.MaximumStringLength] = sla.MaximumLength;
        }

        return result;
    }
}

Естественно, шаблоны по умолчанию с MVC на самом деле ничего не делают с этой информацией. Вы должны настроить их самостоятельно .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...