2013-01-16 50 views
2

e如果操作方法在控制器中不可用,通過使用Html.Action,有沒有什麼辦法可以產生編譯時錯誤?ASP.Net MVC操作方法在Razor cshtml文件中編譯時間錯誤

例如,讓我們說,我們有一個名爲LayoutMainPartialViewsController控制器和這種控制器內,我們有其輸出位於/Views/Shared/PartialViews/_Header.cshtml

public class LayoutMainPartialViewsController : Controller 
{ 
    // 
    // GET: /LayoutMainPartialViews/ 

    public ActionResult Header() 
    { 
     return PartialView("/Views/Shared/PartialViews/_Header.cshtml"); 
    } 

} 

然後爲包括這樣的局部視圖頁眉局部視圖的方法Header,如果由於某種原因,命名爲Header方法被重命名爲Header2我們會內剃刀

@Html.Action("Header", "LayoutMainPartialViews"); 

打電話,沒有給出編譯時錯誤,但只有運行時錯誤。

我希望能夠編譯時錯誤,儘量減少運行時錯誤,因爲它們更難以識別。

在另一個說明,是否有意義稱之爲像?

@(new LayoutMainPartialViewsController().Header()) 

的方法,上述返回ActionResult需要被轉換爲字符串的相同方式Html.Action一樣。

這樣,如果我們將Header更改爲Header2,並在csproj中有<MvcBuildViews>true</MvcBuildViews>,則編譯時會提供錯誤。

+0

我構建了一個自定義工具,該工具執行靜態分析以查找控制器,然後使用映射到每個構建操作的字符串屬性構建一個新的靜態類型,然後使用該類型而不是字符串。如果某個操作被刪除或重命名,則在從該工具重建後會生成編譯時錯誤。我不知道這是否是您的選擇,但對於我的小型mvc3項目來說它確實可行。 – asawyer

+1

@ Html.RenderPartial()是我用於渲染部分視圖的方法... –

+1

查看[T4MVC](http://t4mvc.codeplex.com/)和[FluentHtml](http:// lunaverse。 wordpress.com/2009/02/05/eliminate-magic-strings-in-javascript-with-mvccontribfluenthtml/)消除魔法字符串。 – StuartLC

回答

1

T4MVC是一個用於ASP.NET MVC應用程序的T4模板,它創建強類型的幫助程序,在許多地方消除使用文字字符串。

這正是我所需要的,並刪除了「魔術字符串」的用法,而不是強類型的標識符。如果<MvcBuildViews>true</MvcBuildViews>設置爲true,則即使在視圖中也會提供編譯時錯誤。

感謝@StuartLC的提示!

相關問題