2010-11-10 18 views
5

Chciałbym myśleć, że to jest oczywiste, ale zanim prześlę zgłoszenie błędu, chcę wiedzieć, że nie robię tego źle. Mam ten pogląd za pomocą ASP.NET MVC3 RC z Razor:Składnia MVC Razor 3 RC: Błąd błędu użytkownika?

<div class="miniProfile"> 
    Joined: @FormatTime(Model.Joined)<br /> 
    @if (!String.IsNullOrWhiteSpace(Model.Location)) { 
     Location: @Model.Location<br /> 
    } 
    Posts: @Model.PostCount<br /> 
    @Html.ActionLink("Full Profile", "ViewProfile", new { id = Model.UserID }, new { target = "_blank" }) | 
    @Html.ActionLink("Send Private Message", "SendNew", "PrivateMessages", new { id = Model.UserID }) | 
    @Html.ActionLink("Send E-mail", "Send", "Email", new { id = Model.UserID }) 
    @if (!String.IsNullOrWhiteSpace(Model.Web)) { 
     | <a href="@Model.Web" target="_blank">Visit user Web site: @Model.Web</a> 
    } 
</div> 

To dławi się „Location” i na rurze w ostatnim warunkowe. Gdybym wstawić kilka <tekstowych> tagów, to działa tak:

<div class="miniProfile"> 
    Joined: @FormatTime(Model.Joined)<br /> 
    @if (!String.IsNullOrWhiteSpace(Model.Location)) { 
     <text>Location: </text>@Model.Location<br /> 
    } 
    Posts: @Model.PostCount<br /> 
    @Html.ActionLink("Full Profile", "ViewProfile", new { id = Model.UserID }, new { target = "_blank" }) | 
    @Html.ActionLink("Send Private Message", "SendNew", "PrivateMessages", new { id = Model.UserID }) | 
    @Html.ActionLink("Send E-mail", "Send", "Email", new { id = Model.UserID }) 
    @if (!String.IsNullOrWhiteSpace(Model.Web)) { 
     <text>| </text><a href="@Model.Web" target="_blank">Visit user Web site: @Model.Web</a> 
    } 
</div> 

Mimo pewnych prób i błędów, nie mogę dowiedzieć się, co robię, że jest niegrzeczny. Propozycje?

Odpowiedz

7

znaczników należy następująco

<div class="miniProfile"> 
    Joined: @FormatTime(Model.Joined)<br /> 
    @if (!String.IsNullOrWhiteSpace(Model.Location)) { 
    <text>Location: @Model.Location<br /></text> 
    } 
    Posts: @Model.PostCount<br /> 
    @Html.ActionLink("Full Profile", "ViewProfile", new { id = Model.UserID }, new { target = "_blank" }) | 
    @Html.ActionLink("Send Private Message", "SendNew", "PrivateMessages", new { id = Model.UserID }) | 
    @Html.ActionLink("Send E-mail", "Send", "Email", new { id = Model.UserID }) 
    @if (!String.IsNullOrWhiteSpace(Model.Web)) { 
    <text>| <a href="@Model.Web" target="_blank">Visit user Web site: @Model.Web</a></text> 
    } 
</div> 

Kiedy masz oświadczenie @if, wszystko po curlys jest nadal uważane za „Kod”, więc trzeba wyrwać się z nią albo za pomocą <text> tag lub składnia @:.

Powodem takiego zachowania jest to, że często trzeba będzie jakiś tag zagnieżdżony warunkowe W każdym razie, w którym to przypadku rzeczy po prostu pracować:

@if(condition) { 
    <div>Some content</div> 
} 

Znacznik <text> jest tam dla tych przypadku gdy don nie chcesz, aby treść warunku była zawijana w dowolne znaczniki.

+0

Idealne ... to wyjaśnienie, którego szukałem. Sądzę, że nie było dla mnie jasne, że kod wymaga "sygnału końcowego" i że nowa linia tego nie robi. Jesteśmy bardzo podekscytowani tym RC tutaj w STO, nawiasem mówiąc. :) –

+0

ScottGu właśnie zamieściło pełne wyjaśnienie tej koncepcji na http://weblogs.asp.net/scottgu/archive/2010/12/15/asp-net-mvc-3-razor-s-and-lt -text-gt-syntax.aspx – bdukes

2

Nie możesz mieć zawartości zwykłego tekstu w bloku kodu, silnik Razor nie może dowiedzieć się, czy jest to kod lub znaczniki. To są znaczniki <text>, aby usunąć niejednoznaczność. Czy mówisz, że znaczniki <text> sprawiają, że działa (to jest odpowiedź, nie ma już nic więcej do zrobienia), lub że nadal nie działa z tagami <text> (spróbuj opakować cały blok if w znaczniku <text>)?

Powiązane problemy