【问题标题】:Best way to address breaking change in razor解决剃须刀重大变化的最佳方法
【发布时间】:2014-05-21 04:36:14
【问题描述】:

我们正在将 .NET mvc 应用从 MVC3 升级到 MVC5,其中包括从 Razor 1 升级到 Razor 3。我们在视图中不断遇到的一个错误如下:

在 MVC3 中,我们的许多视图都是这样做的:

@if (someCondition)
{
    @* render some content *@
    @string.Format(...)
}

但是,在 MVC5 中,这会产生以下错误:

System.Web.HttpParseException:“@”后出现意外的“字符串”关键字 特点。进入代码后,您无需为结构添加前缀,例如 “字符串”与“@”。

我知道有两个简单的修复方法:

@if (someCondition)
{
    @* render some content *@
    @: @string.Format(...)
}

或者

@if (someCondition)
{
    @* render some content *@
    <text> @string.Format(...) </text>
}

但是,在数百个视图中进行和测试这些更改会很痛苦。因此我的问题是:解决这个看似重大变化的最佳方法是什么?

  • 是否有某种标志我们可以打开以使剃须刀的行为与以前一样?
  • 在 Razor 3 中这种构造的推荐样式是什么?

【问题讨论】:

标签: c# asp.net-mvc-3 razor asp.net-mvc-5


【解决方案1】:

我认为this question 的答案可能会提供一些帮助。虽然我不知道,也可能没有,你可以在设置中打开一个特定的标志,如果你只是用 @String 替换@string(因此使用类而不是别名),它似乎只是工作很好。

@if (condition)
{
    @String.Format("test {0}", 2992)
}

希望这就像在代码中用“@String”查找/替换任何“@string”实例一样简单。

【讨论】:

    【解决方案2】:

    你好,你可以这样使用,

    @if (someCondition)
    {
        string.Format(...)
    }
    

    不需要这样做,

    @if (someCondition)
    {
        @* render some content *@
        @: @string.Format(...)
    }
    
    Or
    
    @if (someCondition)
    {
        @* render some content *@
        <text> @string.Format(...) </text>
    }
    

    【讨论】:

    • 这在 Razor 3 中不起作用。如果您尝试 string.format() 并且不包含分号,您将收到“;预期”错误。另外,如果你确实包含了分号,它仍然不会显示,因为你还没有将函数的返回值输出到视图中。
    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多