2011-04-25 95 views
1

我剛剛實現了MVCContrib的便攜式區域功能,它工作正常。我可以通過打開它: http://localhost/projectname/portableAreaName,但如果我使用的HtmlHelper擴展方法是這樣使它這種便攜式面積不工作:MVCContrib便攜式區域不工作從HtmlExtensions,MVC 3

public static void RenderHtmlWidget(this HtmlHelper Html) 
{ 
     Html.RenderAction("Index", "HtmlWidget", new {area = "HtmlWidget"}); 
} 

,並呼籲在視圖中的輔助方法,例如:

@using Project.Widgets.HtmlWidget; 
@{Html.RenderHtmlWidget();} 

我收到一個錯誤:未找到'索引'視圖或其主視圖,或者沒有視圖引擎支持搜索的位置。在可能的位置列表中沒有〜/ areas/...定義。 但我可以成功地使我HtmlWidget這個代碼在視圖中同一行:

@{Html.RenderAction("Index", "HtmlWidget", new { area = "HtmlWidget" });} 

我在做什麼錯了,我應該如何正確使用的HtmlHelper擴展與MVCContrib便攜領域的功能?

回答

1

有幾件事情可能造成這種情況。

  • 在使用助手方法調用便攜式區域的調用/父項目中,是否在/ Areas /文件夾中有Web.config文件?如果不是,則必須複製在同一項目的/ Views /文件夾中找到的Web.config,並將新副本放在/ Areas /文件夾中。
  • 在您的便攜式區域項目的註冊類文件中,在「RegisterArea」方法中調用MapRoute之後,是否調用了「RegisterAreaEmbeddedResources();」?
  • 便攜式區域項目中的每個視圖都是嵌入式資源而不是內容?在解決方案資源管理器中選擇一個視圖,然後按F4,「生成操作」應設置爲「嵌入式資源」,但默認爲「內容」
  • 您還需要確保Portable項目和耗用項目參考相同版本的MvcContrib,但他們也使用相同版本的ASP.NET MVC。如果您的區域在多個項目中引用,每個項目都基於不同版本的MVC(不太可能,但可能取決於具體情況),則您的區域必須使用消費項目使用的任何MVC版本。
  • 我也建議使用Phil Haack's .NET Routing Debugger - 它是您在消費應用程序中引用的單個DLL文件,並將一行添加到您的Global.asax.cs中的ApplicationStart()。這對於確定您的便攜式區域是否正確地註冊到基礎項目非常有幫助 - 並幫助您切入正題。