2017-06-29 1 views
1

Dossier bin supprimé et également nettoyé et reconstruit plusieurs fois. Pour une raison quelconque, après avoir vérifié tous les fichiers requis où les routes sont configurées, je cours dans l'erreur de nommage, je l'ai changé et je l'ai manuplé au mieux, mais je suis bloqué. J'essaie d'apprendre asp.net, mais cette erreur m'a stupéfié.Une route nommée 'Billing_Default' est déjà dans la collection de routes. Les noms de route doivent être uniques. Nom du paramètre: nom

Ce système est un dossier, j'ai étendu les plus importants:

Project- 
    Reference- 
    Packages- 
    App_Start- 
     -RouteConfig.cs 
     -WebApiConfig.cs 
    Areas- 
     -Billing 
     -Invoice 
    Content- 
    Controllers- 
    Models- 
    Scripts- 
    Views- 
    Global.asax 
    Pacages.config 
    Web.config 

Je dispose d'un fichier d'enregistrement dans chacune de mes zones.

Voici le code d'enregistrement de l'une des zones.

using System; 
using System.Web.Mvc; 

namespace WORK_GODDAMN.Areas.Billing 
{ 

    public class BillingAreaRegistration : AreaRegistration 
    { 
     public override string AreaName 
     { 
      get 
      { 
       return "Billing"; 
      } 
     } 

     public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       "Billing_default", 
       "Billing/{controller}/{action}/{id}", 
       new { action = "Index", id = UrlParameter.Optional } 
      ); 
     } 
    } 



} 

Voici mon code Global.asax

using System.Web; 
using System.Web.Mvc; 
using System.Web.Routing; 
using System.Web.Http; 

namespace WORK_GODDAMN 
{ 
    public class Global : HttpApplication 
    { 
     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      GlobalConfiguration.Configure(WebApiConfig.Register); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
     } 
    } 
} 

Voici mon code routeConfig

using System.Web.Mvc; 
using System.Web.Routing; 

namespace WORK_GODDAMN 
{ 
    public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      //AreaRegistration.RegisterAllAreas(); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
       namespaces: new string[] { "Core.Controllers" } 
      ); 

     } 
    } 
} 

code cshtml pour la page d'index qui devrait rediriger vers les zones prédéfinies.

<!DOCTYPE html> 

<html> 
    @using System.Web.Optimization 
<head> 
    <meta charset="utf-8" /> 
    <meta name="viewport" content="width=device-width" /> 
    <title>@ViewBag.Title</title> 
    @Scripts.Render("~/Scripts/modernizr.js") 
</head> 
<body> 
    <div> 
     <div> 
      <h2>{Demo}- Pluggable Modules</h2> 
     </div> 
     <div id="nav"> 
      @Html.ActionLink("Home","Index","Home", new {Area=""}, null) | 
      @Html.ActionLink("Marketing","Index","Marketing", new {Area="Marketing"}, null) | 
      @Html.ActionLink("BillingMain", "Index", new { Area = "Billing" }) 
     </div> 
     <hr /> 
     <div> 
       @RenderBody() 
     </div> 
    </div> 
    @Scripts.Render("~/Scripts/jquery.js") 
    @RenderSection("Scripts", required: false) 
</body> 
</html> 

Je ne suis pas pourquoi cette conflictualité se passe, je l'ai nettoyé et reconstruit à plusieurs reprises, je suis en utilisant Visual Studio 2017 Mac si je devais me configurer les zones.

+0

Avez-vous essayé de déplacer 'AreaRegistration.RegisterAllAreas();' en haut de la section des enregistrements dans 'Application_Start()' dans 'Global.asax'? –

+0

Oui, je l'ai fait, j'ai fatigué toutes sortes de combinaisons. –

+1

Vous devez également supprimer 'AreaRegistration.RegisterAllAreas();' de la classe 'RouteConfig' qui tentera de réenregistrer les zones et entraînera le type d'erreur que vous obtenez. –

Répondre

1

Dans ce ActionLink:

@Html.ActionLink("BillingMain", "Index", new { Area = "Billing" }) 

Vous ne spécifiez pas un argument de contrôleur.

Dans votre enregistrement de zone, vous ne spécifiez pas non plus d'argument de contrôleur.

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Billing_default", 
      "Billing/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

Si vous ne spécifiez pas un argument de contrôleur dans votre itinéraire, il est un argument nécessaire, pas une option. Par conséquent, ce lien d'action ne correspondra pas à votre itinéraire et essaiera de faire correspondre l'itinéraire suivant (probablement votre itinéraire par défaut).

Pour rendre le contrôleur facultatif, vous devez spécifier une valeur par défaut.

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Billing_default", 
      "Billing/{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

Sinon, vous devez fournissiez dans votre ActionLink pour qu'il corresponde:

@Html.ActionLink("Billing","Index","BillingMain", new {Area=""}, null) 

Le comportement le plus logique pour les valeurs de la route est généralement de rendre les valeurs nécessaires (comme vous avez) ils ne correspondent donc que si la valeur est fournie par ActionLink.

+0

Mais c'est la recherche dans le dossier Views pas dans Areas/Billing/Views. J'avais défini le contrôleur, mais je l'ai retiré en essayant différentes choses. –

+0

J'ai également ajouté un espace de nommage pour pointer vers le bon dossier, obtenant toujours la même erreur où il est dit '' La vue 'Facturation' ou son maître n'a pas été trouvé ou aucun moteur de vue ne supporte les emplacements recherchés. ..... " –

+0

L'ajout de l'espace de noms n'est pas suffisant pour que MVC recherche les vues dans un autre emplacement. Si vous cassez les conventions d'emplacement d'affichage de MVC, vous devez soit [spécifier explicitement les emplacements d'affichage] (https://stackoverflow.com/a/23335609/181087) ou [modifier les emplacements de recherche dans 'ViewEngine'] (https: // stackoverflow.com/a/909594/181087) pour que cela se produise. Pourtant, ce n'était pas votre question - cela résout le problème de routage que vous aviez. – NightOwl888