2011-04-25 29 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()。这对于确定您的便携式区域是否正确地注册到基础项目非常有帮助 - 并帮助您切入正题。