Wie verwende ich die generische Syntax in einer Razor-Ansichtsdatei?

70

Ich habe versucht, die folgende Aussage zu verwenden:

@Html.Test<ISQL>().Nand()

Razor verschluckt sich jedoch an der <vor der ISQL.

Gibt es eine offizielle Lösung dafür?

Kidoman
quelle
... fehlt Ihnen etwas, weil Sie das nicht in einen Codeblock eingefügt haben? Ich sehe nicht weniger als Zeichen ...
Paul

Antworten:

102

Um generische Methoden zu verwenden, müssen Sie den Ausdruck maskieren

@(Html.Test<ISQL>().Nand())
Marcind
quelle
15

Ich habe diese Frage gerade gefunden, als ich beim Upgrade von mvc nach diesem "gleichen Fehler" gesucht habe.

Ich hatte :

Funktioniert nicht:

@{ 
   ViewBag.Title = "Something " + @Model.Title;
   var something = (IEnumerable<SelectListItem>)ViewBag.Options;    
}

Anscheinend wurde die Syntax strenger, und da Sie sich in einem @ {} -Block befinden, sollten Sie im Beispiel kein @ vor Model.Title hinzufügen. Aber der Fehler im Code-Editor zeigte auf das Generikum und machte mich verrückt.

Es funktioniert einwandfrei, wenn der Code kein <> enthält, sondern nur das @ aus Model.Title entfernt wird, um das Problem zu beheben.

Werke:

@{ 
   ViewBag.Title = "Something " + Model.Title;
   var something = (IEnumerable<SelectListItem>)ViewBag.Options;    
}

Hoffe das hilft jedem

Juan Carrey
quelle
Ich wurde auch verrückt nach diesem! "Dem Codeblock fehlt ein schließendes} Zeichen."
SandRock
1
Vielen Dank. Wirklich geholfen - ein vorheriges @ verursachte Probleme bei der nächsten Anweisung, nicht etwas, auf das Sie direkt hinweisen würden.
Darius
6

Ich schätze, dass diese 'Antwort' etwas spät ist und die Frage offensichtlich zufriedenstellend (und gut) beantwortet wurde. Für zukünftige Besucher dieser Seite gibt es jedoch, wenn Sie nach einem vollständigeren Referenzhandbuch suchen, die MS-Einführung in die Razor-Syntax sowie Phil Haacks sehr nützlichen Razor-Kurzreferenz- Blogbeitrag.

Rich O'Kelly
quelle
5

Ich hatte einen seltsamen Fall, als ich mehrere Aufgaben innerhalb eines @{ ... }Bocks hatte.

@{
    // ... other assignments (without error)
    List<string> stringList = new List<string>()  // ERROR MESSAGE HERE
}

Was auch immer ich tat, es gab immer Fehler wie diesen:

Für die Verwendung des generischen Typs 'Liste' sind Argumente eines Typs erforderlich

Die Lösung : Ich habe die Zuweisungszeile auf einen zweiten @{ ... } Block gesetzt .

@{
    // ... other assignments
}
@{
    List<string> stringList = new List<string>()  // WORKS
}
Schönheit
quelle
2

Es geht um das @ -Zeichen. Dieses Beispiel funktioniert vor dem Upgrade

@{
    string @class = ViewBag.@class;
    IDictionary<string, object> htmlAttributes = new Dictionary<string, object>();
}

Nach dem Upgrade muss es in zwei Blöcke aufgeteilt werden

@{  string @class = ViewBag.@class; }
@{  IDictionary<string, object> attrs = new Dictionary<string, object>(); }
Fred
quelle