J'ai configuré le routage webform sur mon projet asp.net webforms 3.5sp1. Je voudrais avoir les fichiers pour le site dans un répertoire appelé contenu, y compris la page d'accueil, car je voudrais exécuter plusieurs sites en utilisant le même système.Page d'accueil du routage Webform dans un dossier tel que mvc plutôt que la racine du site
Dans MVC, une page par défaut est vide et la page d'accueil se trouve dans un dossier appelé home. Je n'arrive pas à reproduire ce comportement en utilisant le routage de formulaire Web, mais j'aimerais le faire. La page blanche est toujours touchée en premier. le gestionnaire d'itinéraire est frappé en second - il reconnaît que la demande est pour la page d'accueil et configure la page de routage mais n'est pas utilisée. le code du gestionnaire d'itinéraire est simple:
public string VirtualPath { get; private set; }
public IHttpHandler GetHttpHandler(RequestContext
requestContext)
{
string file = requestContext.RouteData.GetRequiredString("File");
string id = requestContext.RouteData.GetRequiredString("Id");
string queryString = "?menuid=" + id;
VirtualPath = "~/" + file;
HttpContext.Current.RewritePath(
string.Concat(
VirtualPath,
queryString));
var page = BuildManager.CreateInstanceFromVirtualPath
(VirtualPath, typeof(Page)) as IHttpHandler;
return page;
}
Y at-il de toute façon que je peux le faire?
Mise à jour Voici mon global.asax Code de la route:
public static void RegisterRoutes(RouteCollection routes)
{
Domain.RepositoryFactory repo = new RepositoryFactory();
foreach (var x in repo.MenuRepository.GetAllEnabledGetMenus())
{
if (string.IsNullOrEmpty(x.Url))
{
//add default
System.Web.Routing.RouteTable.Routes.Add(
new Route("Default.aspx",
new RouteValueDictionary(new { File = x.FileName,
Id = x.Id.ToString() }),
new CoreRouteHandler()));
}
else
{
string url = x.Url;
if(x.Url.StartsWith("/"))
{
url = url.Remove(0, 1);
}
System.Web.Routing.RouteTable.Routes.Add(
new System.Web.Routing.Route(url,
new RouteValueDictionary(new {File = x.FileName,
Id = x.Id.ToString()}),
new CoreRouteHandler()));
}
}
}
Ne pensez pas que vous avez besoin du '~' pour le VirtualPath. S'il vous plaît montrer comment vous avez configuré vos itinéraires dans Global.asax? Le gestionnaire de routage doit toujours être touché en premier! – Markive
J'ai ajouté le code global. Lorsque je parcours la page default.aspx, le chargement commence par le gestionnaire d'itinéraire. Toutes les autres pages itinéraire bien. –
Si je supprime le ~ je reçois une erreur Le chemin virtuel relatif [x] n'est pas autorisé ici. –