Как я могу получить доступ к атрибутам данных для класса в моем представлении MVC - PullRequest
1 голос
/ 15 января 2012

У меня есть следующий класс:

namespace Storage.Models
{
    public class AdminDetail
    {
        public string PartitionKey { get; set; }
        public string RowKey { get; set; }
        public string Title { get; set; }
        public string Status { get; set; }
        public string Type { get; set; }
        public string Level { get; set; }
        [DisplayName("Display Order")]
        public string Order { get; set; }
        public int Row { get; set; }
    }

У меня был некоторый совет, и я установил следующее в качестве модели на мой взгляд:

@model IEnumerable<AdminDetail>

Возможно ли мнекак-то ссылаются на атрибуты моего класса AdminDetail, такие как [DisplayName («Порядок отображения»)].Я хотел бы, чтобы что-то вроде этого показывало метки столбцов для первой строки сетки моей таблицы.

<div>@Html.LabelFor(model => Model.Order)</div>

Но я не уверен, как это сделать, поскольку моя модель представляет собой коллекцию, а неодин экземпляр.

Вот код, который я использую для генерации данных для представления:

        IEnumerable<AdminDetail> details = null;
        IList<AdminDetail> detailsList = null;
        details = from t in _table
                      select new AdminDetail
                      {
                          PartitionKey = t.PartitionKey,
                          RowKey = t.RowKey,
                          Title = t.Title,
                          Status = t.Status,
                          Type = t.Type,
                          Level = t.Level,
                          Order = t.Order
                      };
            #endregion
            detailsList = details
                .OrderBy(item => item.Order)
                .ThenBy(item => item.Title)
                .Select((t, index) => new AdminDetail() { 
                    PartitionKey = t.PartitionKey, 
                    RowKey = t.RowKey, 
                    Title = t.Title, 
                    Status = t.Status, 
                    Type = t.Type, 
                    Level = t.Level, 
                    Order = t.Order, 
                    Row = index + 1 })
                 .ToList();

 return detailsList;

Ответы [ 2 ]

2 голосов
/ 15 января 2012
@model IEnumerable<AdminDetail>

@foreach (var detail in Model)
{
    <div>@Html.LabelFor(x => detail.Order)</div>
}

или если вы используете шаблон редактора, который я бы порекомендовал:

@model IEnumerable<AdminDetail>
@Html.EditorForModel()

, а затем внутри шаблона отображения (~/Views/Shared/EditorTemplates/AdminDetail.cshtml):

@model AdminDetail
<div>@Html.LabelFor(model => model.Order)</div>

ОБНОВЛЕНИЕ:

Вы можете использовать IList<AdminDetail> в качестве типа модели представления, который даст вам индексный доступ к элементам, и вы можете получить метаданные следующим образом:

@model IList<AdminDetail>

<table>
    <thead>
        <tr>
            <th>@Html.LabelFor(x => x[0].Order)</th>
        </tr>
    </thead>
    <tbody>
        @Html.DisplayForModel()
    </tbody>
</table>

и внутри шаблона дисплея (~/Views/Shared/DisplayTemplates/AdminDetail.cshtml):

@model AdminDetail
<tr>
    <td>@Html.DisplayFor(x => x.Order)</td>
</tr>
1 голос
/ 15 января 2012

Поскольку вы пытаетесь создать таблицу и просто нуждаетесь в метке один раз, просто создайте новый элемент нужного вам класса и вызовите для него методы LabelFor.

@{ var labelModel = new AdminDetail; }
@Html.LabelFor(model => labelModel.Order);

Это немного хакерский способ сделать это, но он не позволит вам написать собственное отражение и не будет привязывать метку в заголовке к конкретному вводу на странице.

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