【问题标题】:MVCContrib portable areas not working from HtmlExtensions, MVC 3MVCContrib 可移植区域不适用于 HtmlExtensions,MVC 3
【发布时间】:2011-04-25 17:52:30
【问题描述】:

我刚刚实现了 MVCContrib 的便携式区域功能,它运行良好。我可以使用以下方法打开它: 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 可移植区域功能?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 mvccontrib portable-areas


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-02
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      相关资源
      最近更新 更多