2010-12-11 11 views
16

Dlaczego wymagane jest użycie znacznika <text> w celu zawarcia literału "|" w tym znaczniku? Z pewnością wykracza to poza zakres metody ActionLink.Problem z literałem tekstowym w widoku z ostrzami MVC3

@foreach (var item in Model.DetailItem.PlannedResources) 
{ 
    <tr> 
     <td> 
      @if (Model.ViewMode == ViewMode.Edit) 
      { 
       @Html.ActionLink("Edit", "Edit", new { id = item.PlannedResourceId }) <text>|</text> 
       @Html.ActionLink("Delete", "Delete", new {id = item.PlannedResourceId})                  
      } 
      @Html.ActionLink("Details", "Details", new { id = item.PlannedResourceId }) 
     </td> 
     <td> 
      | @item.ResourceType.Name 
     </td> 
    </tr> 
} 

Jeśli nie używam go, pojawia się błąd CS1525: Invalid expression term '|', ale drugi „|” dostaje się bez przeszkód.

Odpowiedz

20

To dlatego, że gdy znajdujesz się wewnątrz instrukcji z { i } tylko znaczniki HTML są traktowane jako literały, wszystko inne to skrypt po stronie serwera. Musisz więc użyć standardowych znaczników HTML, takich jak <div>, <span>, ... lub jeśli chcesz użyć literału, użyj specjalnego znacznika <text>, który nie jest wysyłany do odpowiedzi.

+0

Interesujące, ale dlaczego mój drugi | char (patrz edycje) poza wewnętrzną {}, ale nadal znajduje się wewnątrz zewnętrznej {} pętli. Czy bycie w tagu HTML uchodzi w jakiś sposób? – ProfK

+0

@ProfK, nie rozumiem. Jakie wewnętrzne i zewnętrzne "{}" mówisz? Co edytuje? –

+1

@ProfK, przepraszam, teraz widzę twoje zmiany. W zewnętrznej '{}', znak '|' znajduje się wewnątrz znacznika: '', dlatego działa, podczas gdy w środku nie ma znacznika: masz '{', jakiś pomocnik po stronie serwera '@ Html.ActionLink' bezpośrednio po '|', bez tagu, a gdy nie ma tagu, jest uważane za stronę serwera. –

18

Jeśli tekst obejmuje wiele linii, można użyć znacznika <text>.

<text>your text here...
over to the 2nd line.</text>

Alternatywnie, jeśli po prostu chcesz odtwarzać postać rury użyć dyrektywy @: aby określić tekst,
tak @:| wyjście wola |, a komunikat o błędzie zniknie.

Powiązane problemy