我正在阅读 Steven Sanderson 的关于 ASP.NET 的书,但我已经到了我真的很困惑的地步。
作品
@foreach (var link in Model)
{
@Html.RouteLink(link, new { controller = "Product", action = "List", category = link, page = 1 });
}
不起作用
@foreach (var link in Model)
{
Html.RouteLink(link, new { controller = "Product", action = "List", category = link, page = 1 });
}
(区别是块内的第一个字符)
在这两种情况下,Razor 都知道它是代码而不是标记 (HTML),那么为什么我必须将
@
符号放在开头?有什么区别&我错过了什么?编辑:
我应该澄清什么不起作用。这是一个菜单,
link
是当前类别。现在,使用 @
它工作正常,您可以看到类别的链接,但没有它,就好像没有类别......你什么也看不到。 最佳答案
在 foreach
内部,解析器会自动判断它是处于代码模式还是 Razor 模板模式,允许您输出 html、 Razor 或代码。
两个语句的区别是一个是razor模板模式(工作),另一个是代码模式(不工作)Html.RouteLink
返回一个 MvcHtmlString
,在您的第二个示例(在代码模式下)中,您执行一个函数并且对返回的 MvcHtmlString
不执行任何操作,因此在您请求页面时不会呈现任何内容。
在第一个工作示例中,它处于 razor 模板模式,当您执行 @Html.RouteLink
时,它会被添加到 razor 模板中,并且 razor 会正确解释并为您呈现链接。
关于c# - 当 @ 已经在代码中时(与内部标记相反),它会做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14505185/