我正在阅读 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/

10-15 04:56