Während Microsoft in Razor MVC4 ein automatisches Rendering von HTML-Attributen erstellt hat, habe ich einige Zeit gebraucht, um herauszufinden, wie eine zweite CSS-Klasse für ein Element basierend auf einem bedingten Rasiererausdruck gerendert werden kann. Ich möchte es mit Ihnen teilen.
Basierend auf einer Modelleigenschaft @ Model.Details möchte ich ein Listenelement ein- oder ausblenden. Wenn es Details gibt, sollte ein div angezeigt werden, andernfalls sollte es ausgeblendet werden. Mit jQuery muss ich lediglich eine Klasseneinstellung bzw. -ausblendung hinzufügen. Für andere Zwecke möchte ich auch eine weitere Klasse hinzufügen, "Details". Mein Aufschlag sollte also sein:
<div class="details show">[Details]</div>
oder <div class="details hide">[Details]</div>
Im Folgenden zeige ich einige fehlgeschlagene Versuche (resultierender Aufschlag unter der Annahme, dass keine Details vorhanden sind).
Dies : <div @(@Model.Details.Count > 0 ? "class=details show" : "class=details hide")>
,
wird dies rendern : <div class="details" hide="">
.
Dies : <div @(@Model.Details.Count > 0 ? "class=\"details show\"" : "class=\"details hide\"")>
.
wird dies rendern : <div class=""details" hide"="">
.
Dies: <div @(@Model.Details.Count > 0 ? "class='details show'" : "class='details hide'")>
wird dies rendern : <div class="'details" hide'="">
.
Keines davon ist korrekt.
quelle
Antworten:
Ich glaube, dass es immer noch eine gültige Logik für Ansichten geben kann. Aber für diese Art von Dingen stimme ich @BigMike zu, es ist besser auf dem Modell platziert. Das Problem kann jedoch auf drei Arten gelöst werden:
Ihre Antwort (vorausgesetzt, dies funktioniert, ich habe es nicht versucht):
Zweite Option:
Dritte Option:
quelle
The "div" element was not closed
'ClubsModel' does not contain a definition for 'ClubsFilter' and no extension method 'ClubsFilter' accepting a first argument of type 'ClubsModel' could be found (are you missing a using directive or an assembly reference?)
Dies:
wird dies rendern:
und ist der Aufschlag, den ich will.
quelle
@Model.Details.Count > 0
. zB<div class="details @(@Model.HasDetails ? "show" : "hide")">
Sie können Ihrem Modell wie folgt Eigenschaften hinzufügen:
und dann wird Ihre Ansicht einfacher und enthält überhaupt keine Logik:
Dies funktioniert auch mit vielen Klassen und rendert keine Klasse, wenn sie null ist:
mit 2 nicht null Eigenschaften wird gerendert:
wenn class1 null ist
quelle
Mit der Funktion String.Format können Sie eine zweite Klasse basierend auf der Bedingung hinzufügen:
quelle