23

ブール値を[はい]または[いいえ]チェックボックスとして表示できるように、表示テンプレートを作成するにはどうすればよいですか?mvc3の使用

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

5 に答える 5

25

「Sim」と「Não」(ポルトガル語のYes / No)が表示されるように、似たようなものを作成する必要がありました。次のファイルを作成しました。

 Views\Shared\DisplayTemplates\Boolean.ascx

そして、次のコードを追加しました。

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

お役に立てれば!

編集 忘れて、あなたの見解では、単にそのように呼んでください:

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

編集 2null許容型(ブール値?)の場合は、次のことを試してください。

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

編集 3Razor構文(Views \ Shared \ DisplayTemplates \ Boolean.cshtml)を使用して:

 @{ Layout = null; }
 @(ViewData.Model ? "Sim" : "Não")
于 2011-07-29T19:52:43.763 に答える
14

この単純なことはどうですか?

@((bool)item.Ativo ? "Yes" : "No")
于 2011-09-30T17:17:06.810 に答える
7

Bool用にHtmlHelperを拡張できます。

かみそりのページで方向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は、私たちによってオーバーロードされたselectrightDisplayForのダミーです。お役に立てば幸いです。

于 2011-07-29T09:19:29.337 に答える
6

@Html.DisplayTextFor(model => model.SomeBoolean)

DisplayFor()の代わりに、組み込みの表示テキストFor()を使用します。

これは古い投稿ですが、現在の回答を見つけるのに苦労していました。

于 2015-04-01T02:55:54.730 に答える
0

真/偽の場合は、 JustinGrantのDisplayTextForを使用してください

NuriYILMAZに基づくyup/nopeの場合、これは.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 ={ブールプロパティ} A ={非ブールプロパティ}

于 2019-10-11T13:41:01.497 に答える