web-dev-qa-db-de.com

MVC-Modell Boolesche Anzeige ja oder nein

ich habe ein boolesches Feld in meinem Modell in MVc 4 Entity Framework 4.5

ich möchte das Feld in meiner Ansicht anzeigen

ich benutze diesen Anruf

@item.isTrue

aber ich habe wahr oder falsch,

ich möchte ja wenn wahr und nein wenn falsch 

was soll ich bitte machen

26
Marco Dinatsoli

Ihrer Ansicht nach:

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

Sie können eine benutzerdefinierte HTML-Helper-Erweiterungsmethode wie folgt verwenden:

@Html.YesNo(item.IsTrue)

Hier ist der Code dafür:

public static MvcHtmlString YesNo(this HtmlHelper htmlHelper, bool yesNo)
{
    var text = yesNo ? "Yes" : "No";
    return new MvcHtmlString(text);
}

Auf diese Weise können Sie es auf der gesamten Site mit einer einzigen Zeile Rasierercode erneut verwenden.

23
hutchonoid

Um die Antwort von DigitalD zu erweitern, können Sie dies in einer Erweiterungsmethode zusammenfassen:

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

Dann können Sie es überall einsetzen:

@item.IsTrue.ToFriendlyString()
4
Ant P

Dies ist etwas spät, aber ...

Eine nützliche Methode, die von anderen Antworten nicht berücksichtigt wurde, ist die Custom DisplayTemplate-Methode.

@model bool
<p>@{Model ? "Yes" : "No"}</p>

In eine Teilansicht (möglicherweise YesNo.cshtml) im Ordner Display Templates (/Views/Shared/DisplayTemplates). Verwenden Sie dann in Ihrer Ansicht diese Zeile:

@Html.Display(item.isTrue,"YesNo")

dabei ist "YesNo" das, was Sie als Teilansicht bezeichnet haben, minus der Erweiterung .cshtml .

Durch Hinzufügen der zweiten Zeichenfolge (der Variablen templateName) weisen Sie DisplayExtensions an, den Boolean-Wert mit Ihrer benutzerdefinierten Vorlage anstelle der Standardmethode (einem Kontrollkästchen) anzuzeigen.

Diese Methode ist möglicherweise nicht die einfachste für diese Situation, aber sie ist für komplexere Situationen hilfreich (z. B. einen benutzerdefinierten Kalender zum Auswählen von Datumsangaben).

2
Lucas Niewohner

Es gibt eine Lösung ähnlich der von @Lucas Niewohner, die von Scott beim Schreiben von .NET übernommen wurde.

Erstellen Sie ein DisplayTemplate mit dem Namen YesNo.cshtml:

@model bool
@if (Model)
{
    @Html.Raw("Yes")
}
else
{
    @Html.Raw("No")
}

Dann dekoriere das ViewModel mit UIHint, um es zu verkabeln:

public class foo
{
...
[UIHint="YesNo"]
public bool SomeBooleanValue { get; set; }
...
}

Jetzt können Sie Ihre MVC-Helfer wie gewohnt verwenden:

...
@Html.DisplayFor (x=> x.SomeBooleanValue)
...

Sie können noch einen Schritt weiter gehen, um auch ein EditorTemplate YesNo.cshtml Zu erstellen:

@model bool
@Html.DropDownList("", new SelectListItem[] { new SelectListItem() { Text = "Yes", Value = "true", Selected = Model }, new SelectListItem() { Text = "No", Value = "false", Selected = !Model }})

Diese Vorgehensweise ist besonders hilfreich, wenn Sie das ViewModel an mehreren Stellen mit einer konsistenten Implementierung verwenden möchten, da Sie die Vorlage nur an einer Stelle zuordnen müssen.

1
Wildcat Matt

Schreiben Sie in Ihr Modell etwas wie folgt:

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

Active ist eine boolesche Eigenschaft. Wir erstellen die ISActive - Eigenschaft, um ihren Wert zu lesen und dem Benutzer die entsprechende Nachricht anzuzeigen. 

1
Milad D Zand

Sie können eine Deskriptor-Requisite für Ihren Grund verwenden:

public bool? IsActive { get; set; }

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

Wenn Sie in einem Ansturm sind, oder Sie verwenden eine ganze Zahl anstelle von Bit. (Ich mache das, falls Sie später eine dritte Option haben und Ihr yes/no zum yes, no, octopus wird, wie es meine immer zu tun scheint. Hier ist die einfache, schnelle, schmutzige Art zu gehen ... ...... Aussicht:

@model MyModel
@using My.Models;
@{
    ViewBag.Title = "Index";
    ViewBag.ReturnUrl = "";
    string Active = ""; //This will hold your "Yes" or "No"
 }

Wenn Sie Ihre Artikel durchgehen ... Der folgende Code setzt Ihre Zeichenfolgenvariable Active auf "Yes" oder "No" und zeigt sie dann einfach so an, wie sie auf der Seite ist (ohne @Html.DisplayFor(...) markup). 

@{if (item.Active == 0){Active = "No";}else{Active = "Yes";}}
@Active

Falls Sie es noch nicht wissen, umgeben Sie die gesamte "if" -Anweisung mit @{}, um das Leben leicht zu machen - es werden keine @-Werte innerhalb der Klammern benötigt ... 

0
Dan B