私はMVC 4エンティティフレームワーク4.5のモデルにブールフィールドを持っています
ビューにフィールドを表示したい
私はこの呼び出しを使用します
@item.isTrue
しかし、私は真か偽になりました、
どうすればいいですか?
あなたの見解では:
@(item.isTrue?"Yes":"No")
次のようなカスタムhtmlヘルパー拡張メソッドを使用できます。
@Html.YesNo(item.IsTrue)
これは次のコードです。
public static MvcHtmlString YesNo(this HtmlHelper htmlHelper, bool yesNo)
{
var text = yesNo ? "Yes" : "No";
return new MvcHtmlString(text);
}
このように、1行のRazorコードでサイト全体で再利用できます。
DigitalDの答えを拡張するには、これを拡張メソッドでまとめることを検討できます。
public static string ToFriendlyString(this Boolean b)
{
return b ? "Yes" : "No";
}
次に、それをあらゆる場所で使用できます。
@item.IsTrue.ToFriendlyString()
モデルに次のように記述します。
public Nullable<bool> Active
{
get;
set;
}
public string ISActive
{
get
{
return (bool)this.Active ? "Yes" : "NO";
}
}
Activeはブール型のプロパティです。作成するISActiveはその値を読み取り、ユーザーに適切なメッセージを表示するためのプロパティです。
これは少し遅いですが、...
他の回答の回答が見当たらない便利な方法の1つは、カスタムDisplayTemplateメソッドです。このコードを置くことにより:
@model bool
<p>@{Model ? "Yes" : "No"}</p>
部分ビューに(多分YesNo.cshtml
)Display Templatesフォルダー(/Views/Shared/DisplayTemplates
)。次に、ビューで次の行を使用します。
@Html.Display(item.isTrue,"YesNo")
ここで、「YesNo」は、パーシャルビューに名前を付けたものですマイナス.cshtml拡張子。
2番目の文字列(templateName
)を追加することにより、DisplayExtensionsに、デフォルトのメソッド(チェックボックス)ではなく、カスタムテンプレートでブール値を表示するように指示します。
この方法は、このような状況では最も簡単ではないかもしれませんが、より複雑な状況(たとえば、日付を選択するためのカスタムカレンダーなど)に便利です。
Scott on Writing .NET から取られた@Lucas Niewohnerに似たソリューションがあります。
YesNo.cshtml
というDisplayTemplateを作成します。
@model bool
@if (Model)
{
@Html.Raw("Yes")
}
else
{
@Html.Raw("No")
}
次に、ViewModelをUIHint
で装飾して接続します。
public class foo
{
...
[UIHint="YesNo"]
public bool SomeBooleanValue { get; set; }
...
}
これで、通常どおりMVCヘルパーを使用できます。
...
@Html.DisplayFor (x=> x.SomeBooleanValue)
...
EditorTemplate YesNo.cshtml
も作成するためにさらに一歩進んでください:
@model bool
@Html.DropDownList("", new SelectListItem[] { new SelectListItem() { Text = "Yes", Value = "true", Selected = Model }, new SelectListItem() { Text = "No", Value = "false", Selected = !Model }})
このアプローチは、テンプレートを1か所で関連付けるだけで済むため、一貫した実装で複数の場所でViewModelを使用する場合に特に役立ちます。
理由に応じて記述子の小道具を使用できます。
public bool? IsActive { get; set; }
public string IsActiveDescriptor => IsActive.HasValue && IsActive ? "Yes" : "NO";
急いでいる場合、またはビットの代わりに整数を使用している場合。 (後で3番目のオプションがあり、yes/no
がyes, no, octopus
になった場合にこれを行います。 Razorビューの上部:
@model MyModel
@using My.Models;
@{
ViewBag.Title = "Index";
ViewBag.ReturnUrl = "";
string Active = ""; //This will hold your "Yes" or "No"
}
次のコードは、文字列変数Active
を「はい」または「いいえ」に設定し、ページにそのまま表示します(@Html.DisplayFor(...)
マークアップ。
@{if (item.Active == 0){Active = "No";}else{Active = "Yes";}}
@Active
まだわからない場合は、「if」ステートメント全体を@{}
で囲むと、簡単になります-括弧内に@
が必要なくなります...