J'expérimente avec ASP.NET MVC et Routes.Méthode publique pour chaque vue? ActionResult et routes par défaut dans ASP.MVC
Il semble que MVC me force à ajouter une méthode publique au contrôleur chaque fois que je veux créer une vue. Par exemple:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
return View();
}
//... a public method for every view.. :(
}
Je ne souhaite pas créer de méthode publique pour chaque vue. Par défaut, je veux le comportement de "return View()" pour toutes les vues dans le système, sauf indication contraire.
Par exemple, HTTP GET:
site.com/about site.com/features site.com/ site.com/testimonials site.com/contact-us
À l'heure actuelle, je dois ajouter:
HomeController.About()
HomeController.Features()
HomeController.Index()
HomeController.Testimonials()
HomeController.ContactUs()
Tous les résultats dans "retour View()". C'est mon problème, j'essaie d'éliminer la création de méthodes d'action publique pour des vues simples.
Pour les vues qui nécessitent un traitement supplémentaire, comme une page Contactez-nous sur un HTTP POST à:
site.com/contact-us
Je voudrais ajouter spécifiquement une méthode dans le contrôleur pour envoyer un message SMTP.
Voici un exemple plus concis de ce que je suis en train de faire:
public class HomeController{
public ActionResult ShowBasicView(){
//HTTP GET:
//site.com/about
//site.com/features
//site.com/
//site.com/testimonials
//All URLs above map to this action
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ContactUs(FormCollection data){
//HTTP POST:
//site.com/contact-us
//POST URL maps here.
SmtpClient.Send(new MailMessage()) //etc...
return View()
}
}
Merci, Brian
J'ai essayé ceci, mais pageName est nul à chaque requête. Pour rooter site.com/ et sur site.com/about. –
l'ai eu! Merci! Fonctionne magnifiquement. –
suffit de changer {id} en {pageName} et cela marchera dans la route.MapRoute() –