解决剃须刀突破性变化的最佳方法

时间:2014-04-08 12:55:51

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

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

在MVC3中,我们的许多观点都这样做:

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

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

  

System.Web.HttpParseException:“@”后面的意外“string”关键字   字符。一旦进入内部代码,您就不需要像这样的结构前缀   “string”with“@”。

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

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

或者

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

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

  • 我们可以使用某种旗帜让剃刀表现得像以前一样吗?
  • Razor 3中此类构造的推荐样式是什么?

2 个答案:

答案 0 :(得分:2)

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

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

希望这就像查找/替换&#34; @ string&#34;的任何实例一样简单。用&#34; @ String&#34;在你的代码中。

答案 1 :(得分:2)

嗨,你可以这样使用,

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

无需这样做,

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

Or

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