ASP.NETMVC3Razor语法问题

ASP.NETMVC3Razor语法问题,asp.net,syntax,asp.net-mvc-3,razor,Asp.net,Syntax,Asp.net Mvc 3,Razor,这个问题在我使用部分视图(MVC3/Razor)时出现,但我确信——这是一个清晰的Razor语法问题,与部分视图没有直接关系。 因此-我有部分视图Menu.cshtml,完整标记为: @model IEnumerable<SportsStore.WebUI.Models.NavLink> @foreach(var link in Model) { @Html.RouteLink(link.Text, link.RouteValues); } @model IEnumerab

这个问题在我使用部分视图(MVC3/Razor)时出现,但我确信——这是一个清晰的Razor语法问题,与部分视图没有直接关系。 因此-我有部分视图Menu.cshtml,完整标记为:

@model IEnumerable<SportsStore.WebUI.Models.NavLink>
@foreach(var link in Model)
{
    @Html.RouteLink(link.Text, link.RouteValues);
}
@model IEnumerable
@foreach(模型中的var链接)
{
@RouteLink(link.Text,link.RouteValues);
}
没问题-“父”视图称之为@{Html.RenderAction(“Menu”,“Nav”);},所有这些都像魔术一样工作。 但是,如果我将Menu.cshtml编辑为:

@model IEnumerable<SportsStore.WebUI.Models.NavLink>
@foreach(var link in Model)
{
    Html.RouteLink(link.Text, link.RouteValues);
}
@model IEnumerable
@foreach(模型中的var链接)
{
RouteLink(link.Text,link.RouteValues);
}
(请参阅Html.RouteLink之前的-NO'@!)所有内容都已中断:现在@{Html.RenderAction(“Menu”,“Nav”);}输出完全为空,没有任何Html标记


想知道-两段代码之间的区别是什么?我假设@之前的foreach也会自动“进入”并应用于Html.RouteLink?那么-我错了吗?

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


运营商的目的是双重的。它可以用于将表达式输出到响应流,就像您在第一个示例中看到的那样。另一个功能是启动代码块。您可以通过
@foreach(模型中的var-link)
看到代码示例中使用的第二种行为
Html.RouteLink
方法只返回一个包含链接的
IHtmlString
;它不做任何其他事情

当您编写
@Html.RouteLink(…)
时,您正在将此链接打印到页面。
当您编写
Html.RouteLink(…)
时,您正在调用该方法,而没有对链接执行任何操作。

因此,什么也没发生。

解释得很好,非常感谢!很遗憾,我不能用绿色标记两个答案。就是这样!现在我相信@operator.:)先生,你是我的英雄。我正在浏览同一篇SportsStore文章,但我正在快速转换为VB.Net。C#和VB之间的转换通常很简单,但使用Razor可能很棘手。我对RouteLink没有创建输出也有同样的问题,看起来VB.Net也有同样的缺陷(读:应用相同的逻辑)。。。我添加了
@
,然后所有的东西都再次启动。谢谢@Smarty