Podczas gdy Microsoft stworzył pewne automagiczne renderowanie atrybutów HTML w maszynce do golenia MVC4, zajęło mi trochę czasu, zanim dowiedziałem się, jak wyrenderować drugą klasę css na elemencie, w oparciu o warunkowe wyrażenie maszynki do golenia. Chciałbym się z wami tym podzielić.
Opierając się na właściwości modelu @ Model.Details, chcę pokazać lub ukryć element listy. Jeśli istnieją szczegóły, należy wyświetlić element div, w przeciwnym razie powinien zostać ukryty. Korzystając z jQuery, wszystko, co muszę zrobić, to dodać odpowiednio klasę show lub hide. Z innych powodów chcę również dodać kolejną klasę, „szczegóły”. Tak więc moja marża powinna wynosić:
<div class="details show">[Details]</div>
lub <div class="details hide">[Details]</div>
Poniżej przedstawiam kilka nieudanych prób (wynikający z marży przy założeniu, że nie ma szczegółów).
To: <div @(@Model.Details.Count > 0 ? "class=details show" : "class=details hide")>
,
uczyni to: <div class="details" hide="">
.
To: <div @(@Model.Details.Count > 0 ? "class=\"details show\"" : "class=\"details hide\"")>
.
uczyni to: <div class=""details" hide"="">
.
To: <div @(@Model.Details.Count > 0 ? "class='details show'" : "class='details hide'")>
uczyni to: <div class="'details" hide'="">
.
Żadne z nich nie są poprawnymi marżami.
źródło
Odpowiedzi:
Uważam, że w poglądach wciąż może istnieć i ważna logika. Ale na tego typu rzeczy zgadzam się z @BigMike, lepiej jest umieścić go na modelu. Powiedziawszy, że problem można rozwiązać na trzy sposoby:
Twoja odpowiedź (zakładając, że to działa, nie próbowałem tego):
Druga opcja:
Trzecia opcja:
źródło
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?)
To:
wyrenderuje to:
i to jest narzut, którego chcę.
źródło
@Model.Details.Count > 0
. np.<div class="details @(@Model.HasDetails ? "show" : "hide")">
Możesz dodać właściwość do swojego modelu w następujący sposób:
a wtedy twój widok będzie prostszy i nie będzie zawierał żadnej logiki:
To zadziała nawet z wieloma klasami i nie wyrenderuje klasy, jeśli jest pusta:
z 2 niezerowymi właściwościami wyrenderuje:
jeśli class1 ma wartość null
źródło
Możesz użyć funkcji String.Format, aby dodać drugą klasę na podstawie warunku:
źródło