【问题标题】:razor with MVC4.0 helper output with method call带有 MVC4.0 辅助输出的剃须刀和方法调用
【发布时间】:2013-04-23 03:32:26
【问题描述】:
@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
}

这是为什么?

【问题讨论】:

    标签: c# .net asp.net-mvc-4 razor-2


    【解决方案1】:
    @helper GetString()
    {
        @string.Format("string_{0}","foo");               
    }
    

    以上代码无法在带有 Razor 2.0 的 ASP.NET MVC 4.0 中编译。

    这是因为 razor 引擎会看到您有一个构造(例如,您的示例中的字符串)并且您正在冗余地使用 @。这不会像你经历的那样编译。

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

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

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

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

    • 你做了一个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>
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 2011-03-12
      相关资源
      最近更新 更多