0

メインの mvc プロジェクトとエリアがあります

Area は、メイン プロジェクトの共有 _Layout.cshtml を使用します。共有の _Layout.cshtml には、メイン プロジェクトのコントローラー「Navigation」を呼び出す RenderPartial("GlobalNavigation","Navigation") があります。だから私はこのエラーを得ました

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

ビューがエリアでコントローラー「ナビゲーション」を呼び出しているためだと思いますが、コントローラー「ナビゲーション」はメインプロジェクトにあります。どうすればこれを修正できますか?

_Layout.cshtml

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

2 に答える 2

2

これを試して:

<div id="global-nav">
    @{ Html.RenderAction("GlobalNavigation", "Navigation", new { area = "" }); }
</div>
于 2013-08-02T17:51:45.883 に答える
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") %>
于 2013-08-02T17:56:34.360 に答える