In MVC3, ho le seguenti aree:
- Mobile
- sandbox
Quindi ho percorso mappe come questa:
context.MapRoute( "Sandbox_default", "Sandbox/{controller}/{action}/{id}", new { controller = "SandboxHome", action = "Index", id = UrlParameter.Optional }
e
context.MapRoute( "Mobile_default", "Mobile/{controller}/{action}/{id}", new { controller = "MobileHome", action = "Index", id = UrlParameter.Optional } );
Il problema è che dà url come:
http: // localhost: 58784 / Mobile / MobileHome
- come faccio a tradurre newButton.Click + = delegate {window.IsOpen = false; }; in vb.net
- formato interno decimale vb / c #
- Come rimuovere il certificato dallo Store in modo pulito
- C'è un modello di codice / modello di progettazione che posso usare quando reagisco ai clic del mouse o alla pressione di un pulsante?
- È ansible triggersre ComboBox SelectedIndex Changed Event anche quando il vecchio e il nuovo indice sono uguali?
e
http: // localhost: 58784 / Sandbox / SandboxHome
Ma lo voglio così:
http: // localhost: 58784 / Cellulare / Casa
http: // localhost: 58784 / Sandbox / Casa
Il problema è quando rinominare il SandboxHome-Controller in Home e il MobileHome-Controller in Home, che darebbe gli URL desiderati, non verrà compilato, dicendo che ha due classi per HomeController.
Come posso avere lo stesso nome del controller in aree diverse?
Sì.
Come spiegato da questo post sul blog: http://haacked.com/archive/2010/01/12/ambiguous-controller-names.aspx
Supponendo che tu abbia una chiamata a RegisterAllAreas e ai file AreaRegistration generati da Visual Studio. Tutto quello che devi fare è lo spazio dei nomi sulla rotta predefinita in ASAX globale per evitare conflitti.
//Map routes for the main site. This specifies a namespace so that areas can have controllers with the same name routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new[]{"MyProject.Web.Controllers"} );
Finché si mantengono i controller Area all’interno dei propri spazi dei nomi. Questo funzionerà.
Sì, ma dovrai cambiare il tuo routing:
context.MapRoute( "Default", "{area}/{controller}/{action}/{id}", new { area = "Mobile", controller = "Home", action = "Index", id = UrlParameter.Optional } );
Potresti anche tenere entrambe le rotte ma non dimenticare di definire l’ area
nelle impostazioni predefinite.
Ovviamente è necessario mantenere i controller nei propri spazi dei nomi di zona:
namespace MyApp.Areas.Mobile.Controllers { public class HomeController : Controller { ... } } namespace MyApp.Areas.Sandbox.Controllers { public class HomeController : Controller { ... } }
Controlla questo link su MSDN e guarda la procedura. E non dimenticare di controllare questo articolo MSDN che parla della registrazione dell’area, perché dovrai chiamare il metodo RegisterAllAreas()
.
E dal momento che vuoi ancora mantenere i controller originali non area, dovresti anche leggere questo articolo di Phil Haack come fare (Credit dovrebbe andare a @Rob nella sua risposta per indicare prima questo post sul blog).