ASP.NET MVC 3 Razor语法问题

时间:2011-03-27 16:36:19

标签: asp.net syntax asp.net-mvc-3 razor

当我使用局部视图(MVC3 / Razor)时会出现这个问题,但我确信 - 这是明确的Razor Syntax问题,与部分视图无直接关系。 所以 - 我有部分视图Menu.cshtml与完整标记为:

@model IEnumerable<SportsStore.WebUI.Models.NavLink>
@foreach(var link in Model)
{
    @Html.RouteLink(link.Text, link.RouteValues);
}

没问题 - “父”视图称之为@ {Html.RenderAction(“菜单”,“导航”);}并且所有工作都是神奇的。 但是,如果我将Menu.cshtml编辑为:

@model IEnumerable<SportsStore.WebUI.Models.NavLink>
@foreach(var link in Model)
{
    Html.RouteLink(link.Text, link.RouteValues);
}

(参见 - Html.RouteLink之前的'NO'@'!)刚刚破解:现在@ {Html.RenderAction(“Menu”,“Nav”);}输出完全为空,没有一个HTML标签。

想知道 - 两段代码有什么区别?我假设 @ 之前 foreach 也会自动“插入”并同时应用于 Html.RouteLink ?所以 - 我错了吗?

2 个答案:

答案 0 :(得分:3)

语句之前的@会将其写入输出流。当你删除它时,你所做的只是在Html对象上调用方法调用。

@ -operator的目的是双重的。它可以用于将表达式输出到响应流,就像您在第一个示例中看到的那样。另一个功能是启动代码块。您可以使用@foreach(var link in Model)

查看代码示例中使用的第二种行为

答案 1 :(得分:3)

Html.RouteLink方法只返回包含链接的IHtmlString;它没有做任何其他事情。

当您撰写@Html.RouteLink(...)时,您将此链接打印到该页面 当你写Html.RouteLink(...)时,你正在调用方法而不对链接做任何事情 因此,没有任何反应。