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,
was soll ich bitte machen
Ihrer Ansicht nach:
@(item.isTrue?"Yes":"No")
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.
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()
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).
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.
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.
Sie können eine Deskriptor-Requisite für Ihren Grund verwenden:
public bool? IsActive { get; set; }
public string IsActiveDescriptor => IsActive.HasValue && IsActive ? "Yes" : "NO";
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 ...