Aktualizuję moje stare widoki .aspx za pomocą nowego silnika widoku Razore. Mam kilka miejsc, w których mam taki kod:
<span class="vote-up<%= puzzle.UserVote == VoteType.Up ? "-selected" : "" %>">Vote Up</span>
Idealnie chciałbym to zrobić:
<span class="vote-up@{puzzle.UserVote == VoteType.Up ? "-selected" : ""}">Vote Up</span>
Jednak są tutaj dwa problemy:
vote-up@{puzzle.UserVote
.... nie traktuje symbolu @ jako początku bloku kodu@puzzle.UserVote == VoteType.Up
patrzy na pierwszą część@puzzle.UserVote
tak, jakby miała renderować wartość zmiennej.
Czy ktoś wie, jak rozwiązać te problemy?
asp.net
asp.net-mvc
asp.net-mvc-3
syntax
razor
Micheasza
źródło
źródło
@(puzzle.UserVote == VoteType.Up ? "-selected" : "")
@(isSomething ? "class='test'" : "")
Na przykład wstrzyknięcie javascript lub podobne, zakoduje je jako jednostki takie jak'
i przerywa stronę. Więc musisz użyćHtml.Raw("..")
. W przeciwnym razie z powyższym kodem otrzymasz coś takiego,<p class='test'>
co jest nieprawidłowe.Odpowiedzi:
To powinno działać:
źródło
Kluczem jest hermetyzacja wyrażenia w nawiasach za ogranicznikiem @. W ten sposób możesz sprawić, by każde wyrażenie złożone działało.
źródło
źródło
W większości przypadków rozwiązanie z CD .. zadziała perfekcyjnie. Miałem jednak nieco bardziej pokręconą sytuację:
Spowoduje to wydrukowanie mi „& nbsp;” na mojej stronie, odpowiednio wygeneruj źródło
&nbsp;
. Teraz jest funkcja,Html.Raw(" ")
która ma pozwolić ci pisać kod źródłowy, z tą różnicą, że w tej konstelacji generuje błąd kompilatora:Skończyło się więc na napisaniu oświadczenia podobnego do następującego, które jest mniej przyjemne, ale działa nawet w moim przypadku:
Uwaga: interesującą rzeczą jest to, że gdy znajdziesz się w nawiasie klamrowym, musisz ponownie uruchomić blok Razor.
źródło
@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw(" ") : Model.MaidenName)
@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw(" ") : Html.Raw(Model.MaidenName))