ブール値を[はい]または[いいえ]チェックボックスとして表示できるように、表示テンプレートを作成するにはどうすればよいですか?mvc3の使用
<%: Html.DisplayFor(model => model.SomeBoolean)%>
ブール値を[はい]または[いいえ]チェックボックスとして表示できるように、表示テンプレートを作成するにはどうすればよいですか?mvc3の使用
<%: Html.DisplayFor(model => model.SomeBoolean)%>
「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")
この単純なことはどうですか?
@((bool)item.Ativo ? "Yes" : "No")
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のダミーです。お役に立てば幸いです。
@Html.DisplayTextFor(model => model.SomeBoolean)
。
DisplayFor()の代わりに、組み込みの表示テキストFor()を使用します。
これは古い投稿ですが、現在の回答を見つけるのに苦労していました。
真/偽の場合は、 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 ={非ブールプロパティ}