web-dev-qa-db-ja.com

MVCモデルブール表示yesまたはno

私はMVC 4エンティティフレームワーク4.5のモデルにブールフィールドを持っています

ビューにフィールドを表示したい

私はこの呼び出しを使用します

@item.isTrue

しかし、私は真か偽になりました、

私はtrueの場合はyes、falseの場合はnoを得たい

どうすればいいですか?

30
Marco Dinatsoli

あなたの見解では:

@(item.isTrue?"Yes":"No")
62
Michael Dunlap

次のようなカスタム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コードでサイト全体で再利用できます。

23
hutchonoid

DigitalDの答えを拡張するには、これを拡張メソッドでまとめることを検討できます。

public static string ToFriendlyString(this Boolean b)
{
    return b ? "Yes" : "No";
}

次に、それをあらゆる場所で使用できます。

@item.IsTrue.ToFriendlyString()
4
Ant P

モデルに次のように記述します。

public Nullable<bool> Active
{
    get;
    set;
}
public string ISActive
{
    get
    {
        return (bool)this.Active ? "Yes" : "NO";
    }
}

Activeはブール型のプロパティです。作成するISActiveはその値を読み取り、ユーザーに適切なメッセージを表示するためのプロパティです。

3
Milad D Zand

これは少し遅いですが、...

他の回答の回答が見当たらない便利な方法の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に、デフォルトのメソッド(チェックボックス)ではなく、カスタムテンプレートでブール値を表示するように指示します。

この方法は、このような状況では最も簡単ではないかもしれませんが、より複雑な状況(たとえば、日付を選択するためのカスタムカレンダーなど)に便利です。

2
Lucas Niewohner

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を使用する場合に特に役立ちます。

1
Wildcat Matt

理由に応じて記述子の小道具を使用できます。

public bool? IsActive { get; set; }

public string IsActiveDescriptor => IsActive.HasValue && IsActive ? "Yes" : "NO";
1
majid.zojaji

急いでいる場合、またはビットの代わりに整数を使用している場合。 (後で3番目のオプションがあり、yes/noyes, 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」ステートメント全体を@{}で囲むと、簡単になります-括弧内に@が必要なくなります...

0
Dan B