2010-11-22 12 views
6

In einer Razor View Engine Vorlage möchte ich Folgendes tun: Ich möchte einige Code zwischen den doppelten Anführungszeichen eines html Attribut setzen. Das Problem ist, dass das Stück Code, das ich einfügen möchte, einige Anführungszeichen selbst enthält.Razor Code zwischen doppelten Anführungszeichen

<a href="Url.Action("Item", new { id = Model.Item.Id, page = page });">@page</a> 

Sie können leicht sehen, wie die Dinge schief drehen :-) Ich weiß, dass ich den Link in einer Variablen berechnen kann, und dann verwenden, aber ich würde lieber nicht:

@{ var action = Url.Action("Question", new { id = Model.Question.Id, page = page }); }     
<a href="@action">@page</a>           

Antwort

17

Sie don Du musst fliehen oder irgendetwas mit Razor machen. Razor ist schlau genug, um zu wissen, wenn Zitate innerhalb von Attributen liegen, weil Sie außerhalb von HTML entkommen, wenn Sie es analysieren.

<a href="@Url.Action("Item", 
     new { id = Model.Item.Id, page = page })">@page</a> 

Dieser Code wird gut funktionieren - So stellen Sie sicher, dass Sie das @ Symbol vor dem Url.Action Anruf, denn wenn Sie es nicht, wird nicht richtig analysiert werden, und ich merke, Sie haben es nicht in Ihre Frage.

Bearbeiten: entfernt; als Url.Action ist keine Aussage.

+4

Eine Anmerkung: Wenn Sie eine Notwendigkeit Konstante Präfix in Ihrem Attribut kombiniert mit Razor Ausdruck, müssen Sie Klammern nach dem @ char hinzufügen, sonst behandelt Razor es als eine E-Mail-Adresse. Beispiel: 'id =" prefix @ (Model.Id) "' –

8

Vielleicht habe ich nicht, in welchem ​​Fall verstehe Ihre Frage bitte korrigieren Sie mich, aber können Sie nicht einfach:

@Html.ActionLink(page, "Question", new { id = Model.Question.Id, page = page }) 
1

Dieses korrekt ist:

href="@(action)"> @page 
+0

Traurig, dass du runtergewählt wurdest - die Lösung für mein Problem war, @ (xxx) anstatt ohne die() 's hinzuzufügen - und ich nehme an, dass du das bist sagten - das "action" Zeug hinein() 's - was mein Problem genau löste, @xxx funktionierte nicht innerhalb von "" –