2013-02-20 55 views
0

這個問題只是一個快速的問題。我在頁面上有一組鏈接,它們都指向相同的控制器方法 - 它們之間的區別在於它們每個都傳遞一個不同的值給該方法,以便後續過程略有不同。我碰巧已經定義爲對應於傳遞的可能值的枚舉,所以想也沒想,我這樣做:在@ Url.Action中使用枚舉()routevalues

@Url.Action("QueryStepTwo", new { type = QueryType.UserRecords }) 

,並驚喜地看到,焉得虎子紅色下劃線。我點擊編譯並導航到該頁面,以驗證CS0103的錯誤消息:「名稱'QueryType'在當前上下文中不存在」。在編輯器中,QueryType是語法高亮顯示的,IntelliSense在我輸入時提供選項列表。

我假設這只是一個VS /智能感知只是有點太聰明,知道事實,實際的頁面分析/渲染引擎不能?將枚舉強制轉換爲字符串或int值並沒有幫助,所以我猜這是與執行的順序有關的。更具體地說,當Razor看到頁面時,枚舉已經超出了範圍。有沒有一種方法可以像這樣在URL助手中使用枚舉,特別是不需要將枚舉定義爲視圖模型的成員?我不喜歡在各地使用魔術弦;他們太容易受到錯別字和愚蠢。

回答

1

確保你完全有資格在那裏此枚舉定義的命名空間:

@Url.Action("QueryStepTwo", new { type = SomeNamespace.QueryType.UserRecords }) 

,或者如果你不想這樣做,你還可以添加一個@using指令的Razor視圖的頂部:

@using SomeNamespace 

如果你想在全球範圍內做到這一點對所有剃鬚刀的意見,你可以在~/Views/web.config這個命名空間添加到<namespaces>節點(不要與~/web.config混淆):

<system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
     <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 

     <add namespace="SomeNamespace" /> 
     </namespaces> 
    </pages> 
</system.web.webPages.razor> 

就Razor視圖中的Intellisense而言,這不是可以信任的東西。希望微軟能夠在未來的版本中改進它。

+0

'@ using'指令已經存在;沒有它我沒有突出顯示或智能感知。多麼奇怪。 – anaximander 2013-02-20 15:21:25

+0

典型的Visual Studio問題:停止開發服務器進程,清理,重建,再次運行...並且問題消失。某處某處必須被緩存,或者其他東西。如果微軟需要解決一件事情,那就是VS引入這種不存在的錯誤的方式。無論如何,你的答案在技術上是正確的,所以你得到了接受:P – anaximander 2013-02-20 15:24:20