2009-11-04 3 views
1

Je dois migrer une application Web que j'ai créée avec ASP.NET MVC vers un site Web ASP.NET Web Forms basé sur Visual Studio 2005 standard.Configuration MVC minimale pour ASP.NET 2.0

J'ai regardé des choses comme MonoRail, mais c'est trop différent pour mes collègues (qui sont déjà mal à l'aise avec MVC) à utiliser. J'ai lu que la première version d'ASP.NET MVC a été faite dans un vol d'avion, c'est le genre de complexité que je suis prêt à gérer.

Je n'ai pas besoin d'ORM. J'ai un ORM que j'ai utilisé depuis longtemps et que je vais utiliser pour remplacer Entity Framework. Plus précisément, je cherche principalement deux choses: comment faire des routes en utilisant une ligne ou deux dans un web.config et un fantaisie Default.aspx, et comment rendre une page aspx avec des données de modèle injectées dans elle.

Répondre

0

Je suis en mesure de prendre le code de la article de blog que j'ai mentionné avant (A MVC Framework implementation in .Net 2.0 (Spanish)) et le battre en quelque chose à peine utilisable.

Depuis que je ne comprends pas du tout httpHandlers, j'ai ajouté un hack en utilisant le Intelligencia.UrlRewriter. En fin de compte, j'ajouté ce qui suit à mon web.config

<httpModules> 
    <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/> 
</httpModules> 
    <httpHandlers> 
    <add verb="*" path="*.mvc" type="MyApp.MainController"/> 
     <remove verb="*" path="/MyApp/Views/*"/> 
     <remove verb="*" path="/MyApp/Views/*/*"/> 
     <remove verb="*" path="/MyApp/Content/*"/> 
     <remove verb="*" path="/MyApp/Content/*/*"/> 
     <remove verb="*" path="/MyApp/Scripts/*"/> 
     <remove verb="*" path="/MyApp/Scripts/*/*"/> 
    </httpHandlers> 
</system.web> 

En faisant cela, je devais ajouter un ASPX à la fin de l'URL comme ceci:/MyApp/Accueil/Index .aspx. J'ai essayé d'utiliser une extension .mvc, mais cela n'a pas fonctionné non plus.

J'ai encore des problèmes avec la publication. Il faudra beaucoup de travail pour que MainController d'Alejandro gère correctement plusieurs variables post, je vais probablement devoir faire une classe FormCollection.

0

Voir ces articles pour les guides sur la façon de mettre en œuvre le routage (bien le faire avec seulement une ou deux lignes web.config peut être un objectif élevé):

pour injecter vos données de modèle - dans le code récupérer derrière l'objet de modèle que vous voulez, et utiliser les événements de page (Page_Load, etc) pour insérer les données aux contrôles, ou se lier à contrôles pouvant être liés.

0

Après beaucoup de Google, j'ai trouvé http://mudabone.com/?page_id=335 qui ressemble à peu près exactement ce que je veux, mais le lien du code source est cassé.

+0

Enfin trouvé quelque chose qui ne fonctionne pas 404 http://alejandrovidalquiroga.blogspot.com/ –

1

Vous pouvez router selon MVC dans ASP.NET.

En global.asax:

protected void Application_Start(object sender, EventArgs e) 
{ 
    //do stuff 
    RegisterRoutes(RouteTable.Routes); 
    //do stuff 
? 

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.RouteExistingFiles = true; 

     routes.Add(new Route("{controller}/{action}", 
      new RouteValueDictionary { { "controller", "user" }, { "action", "home" } }, 
      new RouteValueDictionary { { "controller", @"^(?!Resources)\w*$" }, { "action", "[a-zA-Z]+" } },// means that .htm path will go straight to the file, not thru our router 
      new MvcRouteHandler())); 
} 

Créez votre propre gestionnaire d'itinéraire

public class CustomRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     //do stuff 
     string controller = RequestContext.RouteData.Values["controller"].ToString(); 
     string methodName = RequestContext.RouteData.Values["action"].ToString(); 
     //do stuff 
    } 

} 

public class RoutingHandler : UrlRoutingHandler 
{ 
    protected override void VerifyAndProcessRequest(IHttpHandler httpHandler, HttpContextBase httpContext) 
    { 
    } 
} 

Pour le web.config:

<httpHandlers> 
    <remove verb="*" path="*.asmx" /> 
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" /> 
    ***<add verb="*" path="UrlRouting.axd" validate="false" type="CustomHttpHandlerNamespaceAndClassName, CustomHttpHandlerNamespace" />*** 
</httpHandlers> 
<httpModules> 
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
</httpModules> 
+0

Malheureusement, le module de routage fait partie de .Net Framework 3.5. –

Questions connexes