Question

Je suis nouveau sur MVC (et le routage ASP.Net).J'essaie de cartographier *.aspx à un contrôleur appelé PageController.

routes.MapRoute(
   "Page",
   "{name}.aspx",
   new { controller = "Page", action = "Index", id = "" }
);

Le code ci-dessus ne mapperait-il pas *.aspx à PageController?Lorsque j'exécute ceci et que je tape n'importe quelle page .aspx, j'obtiens l'erreur suivante :

Le contrôleur du chemin « /Page.aspx » est introuvable ou il n’implémente pas l’interface IController.Le nom du paramètre:Type de contrôleur

Y a-t-il quelque chose que je ne fais pas ici ?

Était-ce utile?

La solution

Je viens de répondre à ma propre question.J'avais les itinéraires vers l'arrière (la valeur par défaut était au-dessus de la page).

Oui, vous devez placer toutes les routes personnalisées au-dessus de la route par défaut.

Cela nous amène donc à la question suivante...Comment la route "par défaut" correspond-elle (je suppose qu'ils utilisent des expressions régulières ici) l'itinéraire "page"?

La route par défaut correspond en fonction de ce que nous appelons la convention sur la configuration.Scott Guthrie l'explique bien dans son premier article de blog sur ASP.NET MVC.Je vous recommande de le lire ainsi que ses autres articles.Gardez à l’esprit que ceux-ci ont été publiés sur la base du premier CTP et que le cadre a changé.Vous pouvez également trouver une diffusion Web sur ASP.NET MVC sur le site asp.net de Scott Hanselman.

Autres conseils

Je viens de répondre à ma propre question.J'avais les itinéraires à l'envers (la valeur par défaut était au-dessus de la page).Vous trouverez ci-dessous l'ordre correct.Cela nous amène donc à la question suivante...comment la route « Par défaut » correspond-elle (je suppose qu'ils utilisent des expressions régulières ici) à la route « Page » ?

routes.MapRoute(
            "Page",
            "{Name}.aspx",
            new { controller = "Page", action = "Display", id = "" }
        );

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

Sur l'une des vitrines MVC de Rob Conery captures d'écran, il rencontre exactement ce problème.Cela prend environ 23 minutes, si cela vous intéresse.

Je ne sais pas à quoi ressemble votre contrôleur, l'erreur semble indiquer qu'il ne parvient pas à trouver le contrôleur.Avez-vous hérité de Controller après avoir créé la classe PageController ?Le PageController se trouve-t-il dans le répertoire Controllers ?

Voici mon itinéraire dans le Global.asax.cs

routes.MapRoute(
    "Page", 
    "{Page}.aspx", 
    new { controller = "Page", action = "Index", id = "" }
);

Voici mon contrôleur, qui se trouve dans le dossier Controllers :

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class PageController : Controller
    {
        public void Index()
        {
            Response.Write("Page.aspx content.");
        }
    }
}
public class AspxRouteConstraint : IRouteConstraint
{
    #region IRouteConstraint Members

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        return values["aspx"].ToString().EndsWith(".aspx");
    }

    #endregion
}

enregistrer l'itinéraire pour tous les aspx

  routes.MapRoute("all", 
                "{*aspx}",//catch all url 
                new { Controller = "Page", Action = "index" }, 
                new AspxRouteConstraint() //return true when the url is end with ".aspx"
               );

Et vous pouvez tester les itinéraires en MvcRouteVisualiseur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top