4
@helper GetString()
{
    @string.Format("string_{0}","foo");               
}

上面的代码不会在带有 Razor 2.0 的 ASP.NET MVC 4.0 中编译。但是如果我之前删除 '@' string.Format,那么代码会编译,但字符串不会输出到生成的 HTML。这是为什么?在带有 Razor 1.x 的 MVC 3.0 中,上述代码按预期工作。我通过引入一个变量来用下面的代码解决这个问题

@helper GetString()
{
    var url = string.Format("string_{0}","foo");               
    @url
}

为什么是这样?

4

1 回答 1

2
@helper GetString()
{
    @string.Format("string_{0}","foo");               
}

上面的代码不会在带有 Razor 2.0 的 ASP.NET MVC 4.0 中编译。

那是因为剃刀引擎会看到你有一个构造(例如你的例子中的字符串)并且你正在使用@冗余。正如你所经历的那样,它不会编译。

但是如果我在 string.Format 之前删除'@',那么代码会编译,但字符串不会输出到生成的 HTML。

什么都不会输出,因为你没有告诉剃须刀引擎要写什么。你只是做了一些代码。它类似于在 c# 中执行 astring.Format并且不将其分配给变量。

我通过引入一个变量来用下面的代码解决这个问题

与我之前提到的有关,在您引入变量并编写它的那一刻,您现在正在告诉 razor 引擎输出一些东西。这类似于 ac# 控制台应用程序,其中:

  • 你做了一个string.Formatstring.Format("string_{0}","foo");
  • 将其输出分配给一个变量:var url = string.Format("string_{0}","foo");
  • 打印变量:@url

您可以阅读这篇博文,以更好地了解 razor 引擎在@.

现在,对于您正在做的事情的替代方法,您可以这样做:

@helper GetString()
{        
    <text>@string.Format("string_{0}", "foo")</text>
}
于 2013-04-23T03:49:29.180 回答