Как отобразить украшение модели в виде? - PullRequest
3 голосов
/ 28 февраля 2012

Я построил поисковую модель с поисковой строкой и украсил ее минимальной длиной. В моем представлении я хотел бы отобразить требования для строки поиска, но как мне добраться до украшения?

Модель:

public class SearchModel
{
    [StringLength(50,MinimumLength = 4)]
    public string Searchname { get; set; }
}

Razor:

@model Project.Models.SearchModel

<p>
    The search value has to be a min length of: ... 
</p>

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Вы можете сделать это:

@(typeof(SearchModel).GetProperty("Searchname").GetCustomAttributes(true)
    .OfType<StringLengthAttribute>().First().MinimumLength)

Хотя ради чистоты MVC вам, вероятно, следует избегать использования этой логики в коде представления.Либо:

  • Заставьте ваш контроллер получить эту информацию и поместить ее в саму модель в качестве отдельного свойства, либо
  • Используйте пользовательский ModelMetadataProvider, чтобы сделать информацию доступной через метаданные модели.
1 голос
/ 28 февраля 2012

Вы можете получить это значение из атрибута валидатора на стороне клиента.

$('#Searchname').attr('data-val-length-min')

Или это нужно на стороне сервера в бритве?

@{
    var attr = typeof(NAMESPACE.SearchModel).GetProperty("Searchname").GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.StringLengthAttribute), true)[0];
    var min = attr.GetType().GetProperty("MinimumLength").GetValue(attr, null);
}
.
.
.
<p>The search value has to be a min length of: @min</p>
...