@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
}
为什么会这样?
答案 0 :(得分:2)
@helper GetString()
{
@string.Format("string_{0}","foo");
}
上面的代码不能在带有Razor 2.0的ASP.NET MVC 4.0中编译。
这是因为剃刀引擎会看到你有一个构造(例如你的例子中的字符串)并且你正在冗余地使用@
。这不会像你经历的那样编译。
但是如果我在string.Format之前删除'@',那么代码会编译,但是 该字符串不会输出到生成的HTML。
没有任何东西会被输出,因为你没有告诉剃须刀引擎要写什么。你刚刚做了一些代码。它类似于在c#中执行并执行string.Format
而不是将其分配给变量。
我通过引入变量
来解决这个问题
与我前面提到的相关,在你引入变量并编写它的那一刻,你现在告诉剃刀引擎输出一些东西。这与c#console应用程序类似,其中:
string.Format
:string.Format("string_{0}","foo");
var url = string.Format("string_{0}","foo");
@url
您可以read this blog post更好地了解剃刀引擎在@
的使用方面的工作原理。
现在替代你正在做的事情,你可以这样做:
@helper GetString()
{
<text>@string.Format("string_{0}", "foo")</text>
}