c# – 带有方法调用的MVC4.0助手输出的razor

@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>
}
点赞