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?


... 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())

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


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.


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
}

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>(); }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.