MVC, как отображать значения булевых таблиц в качестве альтернативных текстовых значений - PullRequest
0 голосов
/ 16 января 2012

У меня есть класс с именем InvoiceLine, который имеет следующие свойства.

public class InvoiceLine : IEntity
    {
        ...

        public virtual int? OfficeUserId { get; set; }
        public virtual int? FieldUserId { get; set; }
        public virtual bool? OfficeApproved { get; set; }
        public virtual string OfficeRejectionReason { get; set; }
        public virtual DateTime? OfficeApprovedDate { get; set; }
        public virtual bool? FieldApproved { get; set; }
        public virtual string FieldRejectionReason { get; set; }
        public virtual DateTime? FieldApprovedDate { get; set; }

        ...

        public virtual User OfficeUser { get; set; }
        public virtual User FieldUser { get; set; }

        ...
}

Я хочу отобразить в таблице что-то вроде:

<td>Office sign off: Conan the Barbarian Approved</td>
<td>Field sign off: Steve the snake Not Approved</td>

Итак, я написал:

<td>Office sign off:
                        @Html.DisplayFor(modelItem => invoiceLine.OfficeUser.UserName)
                        @Html.DisplayFor(modelItem => invoiceLine.OfficeApproved)
                    </td>
                    <td>Field sign off:
                        @Html.DisplayFor(modelItem => invoiceLine.FieldUser.UserName)
                        @Html.DisplayFor(modelItem => invoiceLine.FieldApproved)
                    </td>

Очевидно, что это не дает требуемый формат и обеспечивает что-то вроде:

<td>
Office sign off: Conan the Barbarian
<select class="tri-state list-box" disabled="disabled">
<option value="">Not Set</option>
<option value="true" selected="selected">True</option>
<option value="false">False</option>
</select>
</td>

<td>
Office sign off: Steve the snake
<select class="tri-state list-box" disabled="disabled">
<option value="">Not Set</option>
<option value="true">True</option>
<option value="false" selected="selected">False</option>
</select>
</td>

Итак, я получаю логические значения для утверждений в выпадающих списках, что имеет смысл. Как мне заставить его отображать вместо этого, как я описал ранее?

1 Ответ

2 голосов
/ 16 января 2012

Самый простой способ сделать это - просто игнорировать встроенные помощники и записать их следующим образом:

@( invoiceLine.FieldApproved.HasValue ? (invoiceLine.FieldApproved.Value ? "Approved" : "Not Approved"):"Not Specified" )

Тем не менее, вам лучше всего написать собственный обработчик HTML, я думаю (особенно, если это обычная задача и будет использоваться на странице с подробностями и т. Д.).

public static MvcHtmlString ApprovedBoolFor<TModel, bool?>(this HtmlHelper<TModel> html, Expression<Func<TModel, bool?>> selector)
{
    var prop = selector.Compile().Invoke(html.ViewData.Model);
    var appVal = prop.HasValue ?
              (prop.Value ? "Approved" : "Not Approved")
              : "Not specified";

    return new MvcHtmlString(appVal);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...