2013-08-02 7 views
0

J'ai un projet principal et une zone mvczone mvc appelant contrôleur principal du projet

La zone utilise le _Layout.cshtml partagé du projet principal. Dans le _Layout.cshtml partagé, il y a un RenderPartial ("GlobalNavigation", "Navigation") qui appelle le contrôleur "Navigation" dans le projet principal. Donc, je suis arrivé cette erreur

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

Je suppose que parce que la vue appelle le contrôleur « Navigation » dans la zone, mais le contrôleur « Navigation » est dans le projet principal. Comment puis-je réparer cela?

_Layout.cshtml

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

essayez de définir la zone à ' « »' – cadrell0

+0

Pourquoi avez-vous créé une zone si vous souhaitez utiliser le contrôleur dans le projet principal? – ataravati

Répondre

2

Essayez ceci:

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

Merci. Quelle est la "zone" dans cette ligne? – kaboom

+0

Eh bien, je ne comprends pas votre question. "area" est la zone dans votre projet MVC. Lorsque vous définissez 'area =" "', vous demandez au serveur asp.net d'utiliser le contrôleur dans le "projet principal". – ataravati

+1

Vous passez 'new {area =" "}' en tant qu'objet représentant vos RouteValues. Vous pouvez également spécifier le contrôleur et l'action dans RouteValue. Comme ceci: 'Html.RenderAction (" GlobalNavigation ", nouveau {controller =" Navigation ", area =" "});' – ataravati

0

Pourquoi avez-vous besoin de l'argument du contrôleur si vous êtes juste un chargement partiel? Y a-t-il une logique dans la méthode du contrôleur?

juste essayer:

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

Autre sage, je suggère d'utiliser un assistant HTML dans votre projet pour construire notre votre navigation principale.

par ex.

Aide à 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); 
     } 
    } 
} 

appeler ensuite dans la partie avec

<%= Html.NavMenuLink("Copy to display", "ControllerName", "Link", "class") %> 
+0

merci. Pouvez-vous élaborer sur ce que signifient le «lien» et la «classe»? désolé, je suis très nouveau pour mvc – kaboom

+1

Lien est le lien que l'URL de l'ancre pointera vers, la classe est active et ajoutera une classe active en fonction de l'endroit où vous êtes (pour le style) –

Questions connexes