2014-04-08 49 views
4

我們正在將.NET MVC應用程序從MVC3升級到MVC5,其中包括從Razor 1升級到Razor 3.我們在視圖中持續出現的錯誤如下:解決剃鬚刀變化問題的最佳方法

在MVC3,我們的很多觀點做到這一點:

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

然而,在這MVC5提供了以下錯誤:

System.Web.HttpParseException: Unexpected "string" keyword after "@" character. Once inside code, you do not need to prefix constructs like "string" with "@".

有兩個簡單的修復,我知道:

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

或者

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

然而,這將是痛苦的,使在數百條意見測試這些變化。因此,我的問題是:解決這個看似突破的改變的最佳方式是什麼?

  • 是否有某種標誌,我們可以打開使剃鬚刀的行爲,因爲它曾經是?
  • Razor 3中這種結構的推薦樣式是什麼?
+0

在MVC4剃刀[可能的重大更改是可以固定的可能重複「@:@」 ](http://stackoverflow.com/questions/15543841/possible-breaking-change-in-mvc4-razor-that-c​​an-be-fixed-with) –

回答

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> 
} 
+1

這不會在剃刀3中工作。你會得到一個「 ;預期「錯誤,如果你嘗試string.format()並且不包含分號。另外,如果包含分號,它仍然不會顯示,因爲您沒有將該函數的返回值輸出到視圖。 – ryanulit