Как мне переопределить DisplayFor boolean?

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

<%: Html.DisplayFor(model => model.SomeBoolean)%>
21
задан newbie_86 29 July 2011 в 08:43
поделиться

1 ответ

Для истинного/ложного использования DisplayTextFor Justin Grant

Для да/нет на основе Nuri YILMAZ , это-.NetCore 2.2, для понижения заменяют HtmlString MvcHtmlString:

1) C# пишут новый дополнительный DisplayForYZ

public namespace X.Views.Shared
{
    public static class DisplayExtensions
    {
        // If this was called DisplayFor not DisplayForYZ, we'd get recursion
        public static IHtmlContent DisplayForYZ<TModel, TValue>
          (this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) 
        where TModel : Y
        {
            object o = expression.Compile().Invoke(html.ViewData.Model);
            // For any bool on TModel, return in this custom way:
            if (o.GetType() == typeof(bool))
            {
                return (bool)o ? new HtmlString("Yup") : new HtmlString("Nope");
            }
            // Otherwise use default behaviour 
            return html.DisplayFor(expression);
        }
    }
}

2), cshtml: Импортируйте DisplayExtensions пространство имен и используйте новое расширение.

@model X.ViewModels.Y
@using X.Views.Shared;

@Html.DisplayForYZ(modelItem => modelItem.Z)   @*//Yup/Nope*@
@Html.DisplayForYZ(modelItem => modelItem.A)   @*//default non bool behavior*@

@Html.DisplayFor(modelItem => modelItem.Z)     @*//check box*@
@Html.DisplayTextFor(modelItem => modelItem.Z) @*//true/false*@

X = {моя компания} Y = {возражают для специализированного дисплея} Z = {bool свойство} А = {non-bool свойство}

0
ответ дан 29 November 2019 в 20:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: