Как мне переопределить DisplayFor Boolean? - PullRequest
21 голосов
/ 29 июля 2011

Как мне создать шаблон отображения, чтобы я мог отображать bool как Да или Нет, а не флажок? Использование mvc3

<%: Html.DisplayFor(model => model.SomeBoolean)%>

Ответы [ 4 ]

22 голосов
/ 29 июля 2011

Мне нужно было создать что-то похожее, чтобы отображались «Sim» и «Não» (португальский Да / Нет). Я создал следующий файл:

 Views\Shared\DisplayTemplates\Boolean.ascx

И добавил следующий код:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%= (bool) ViewData.Model ? "Sim" : "Não" %>

Надеюсь, это поможет!

EDIT Забыл, на ваш взгляд, просто назвать это так:

<%= Html.DisplayFor(i => item.Ativo) %>

РЕДАКТИРОВАТЬ 2 Для обнуляемого (bool?) Попробуйте это:

<%= (ViewData.Model == null) ? "NA" : (ViewData.Model == true) ? "Y" : "N"%>

РЕДАКТИРОВАТЬ 3 Использование синтаксиса Razor (Views \ Shared \ DisplayTemplates \ Boolean.cshtml):

 @{ Layout = null; }
 @(ViewData.Model ? "Sim" : "Não")
12 голосов
/ 30 сентября 2011

Как насчет этой простой вещи:

@((bool)item.Ativo ? "Yes" : "No")
6 голосов
/ 01 апреля 2015

Это старый пост, но у меня возникли проблемы с поиском текущего ответа.

На самом деле в MVC 5 есть метод @HTML, @Html.Display**Text**For(model => model.SomeBoolean).

6 голосов
/ 29 июля 2011

вы можете расширить HtmlHelper для bool.

и помните, что вы должны использовать пространство имен направления YesNoExtensions на странице бритвы.rem: мы можем перегрузить DisplayFor для логического значения со знаком изменения функции.

public namespace SampleExtensions
{
    public static class YesNoExtensions
    {
        public static MvcHtmlString DisplayFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, bool flag = true)
        {
            object o = expression.Compile().Invoke(html.ViewData.Model);
            if (o.GetType() == typeof(bool))
            {
                if ((bool)o)
                    return new MvcHtmlString("Yes");
                else
                    return new MvcHtmlString("No");
            }
            return DisplayFor(html, expression);
        }
    }
}

и страница бритвы.

<%@ import namespace='SampleExtensions' %>


<%: Html.DisplayFor(model => model.SomeBoolean, true)%>

последний параметр true является фиктивным для выбора справа DisplayFor, который был перегружен нами.Я надеюсь, что полезно.

...