@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
}
为什么是这样?
最佳答案
@helper GetString()
{
@string.Format("string_{0}","foo");
}
Above code will not compile in ASP.NET MVC 4.0 with Razor 2.0.
这是因为剃刀引擎会看到你有一个构造(例如你的例子中的字符串)而你正在使用@ redundantly.这不会像你经历的那样编译.
But if I remove ‘@’ before string.Format, then the code compiles, but
the string will not be outputed to the generated HTML.
没有任何东西会被输出,因为你没有告诉剃须刀引擎要写什么.你刚刚做了一些代码.它类似于在c#中执行并执行string.Format而不是将其分配给变量.
I walkaround this with below code by introducing a variable
与我之前提到的相关,在您引入变量并编写它的那一刻,您现在告诉剃刀引擎输出一些东西.这与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>
}