1

我刚刚实现了 MVCContrib 的 Portable Area 功能,它运行良好。我可以使用打开它: http://localhost/projectname/portableAreaName,但是如果我使用 HtmlHelper 扩展方法渲染它,这个便携式区域将不起作用,如下所示:

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 可移植区域功能?

4

1 回答 1

1

有几件事可能会导致这种情况。

  • 在使用辅助方法调用可移植区域的调用/父项目中,/Areas/ 文件夹中是否有 Web.config 文件?如果没有,您必须复制在同一项目的 /Views/ 文件夹中找到的 Web.config,并将新副本也放入 /Areas/ 文件夹中。
  • 在您的可移植区域项目中的Registration类文件中,您在“RegisterArea”方法中调用MapRoute之后,您是在调用“RegisterAreaEmbeddedResources();”吗?
  • 您的可移植区域项目中的每个视图是否都是嵌入资源而不是内容?在解决方案资源管理器中选择一个视图并按 F4,“构建操作”应设置为“嵌入式资源”,但默认为“内容”
  • 您还需要确保 Portable 项目和消费项目都引用相同版本的 MvcContrib,但它们也使用相同版本的 ASP.NET MVC。如果您的区域在多个项目中被引用,每个项目都基于不同版本的 MVC(不太可能,但可能取决于具体情况),您的区域必须使用消费项目使用的任何版本的 MVC。
  • 我还建议使用Phil Haack 的 .NET Routing Debugger - 它是您在使用应用程序中引用的单个 DLL 文件,并在 Global.asax.cs 中的 ApplicationStart() 中添加一行。这对于确定您的便携式区域是否在基础项目中正确注册非常有帮助 - 并帮助您切入正题。
于 2011-07-22T20:17:31.040 回答