mvc区域从主项目调用控制器

时间:2013-08-02 17:27:47

标签: asp.net-mvc asp.net-mvc-areas

我有一个主要的mvc项目和一个区域

区域使用主项目中的共享_Layout.cshtml。在共享的_Layout.cshtml中,有一个RenderPartial(“GlobalNavigation”,“Navigation”),它在主项目中调用控制器“Navigation”。所以我收到了这个错误

The IControllerFactory 'abc.NinjectControllerFactory' did not return a controller for the name 'Navigation'.

我猜它是因为视图在区域中调用Controller“Navigation”,但控制器“Navigation”在主项目中。我该如何解决这个问题?

_Layout.cshtml

<div id="global-nav">
    @{ Html.RenderAction("GlobalNavigation", "Navigation"); }
</div>

2 个答案:

答案 0 :(得分:2)

试试这个:

<div id="global-nav">
    @{ Html.RenderAction("GlobalNavigation", "Navigation", new { area = "" }); }
</div>

答案 1 :(得分:0)

如果您只是加载部分,为什么需要控制器参数?是否在控制器方法中构建了逻辑?

尝试:

@{ Html.RenderAction("GlobalNavigation"); }

另外,我建议在项目中使用HTML帮助程序来构建主导航。

例如

PROJECT.Web.ExtensionMethods.HtmlExtensions

中的助手
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;

namespace OHTP.Web.ExtensionMethods
{
    public static class HtmlExtensions
    {
        public static MvcHtmlString NavMenuLink(this HtmlHelper helper, string linkText, string actionName, string controlName, string activeClassName)
        {
            if (helper.ViewContext.RouteData.Values["action"].ToString() == actionName &&
                helper.ViewContext.RouteData.Values["controller"].ToString() == controlName)
            {
                var menuLink = helper.ActionLink(linkText, actionName, new { Controller = controlName }, new {Class = activeClassName}); 
                return menuLink;
            }

            return helper.ActionLink(linkText, actionName, controlName);
        }
    }
}

然后使用

在部分中调用它
<%= Html.NavMenuLink("Copy to display", "ControllerName", "Link", "class") %>