2009-12-28 6 views
1

J'ai créé une structure de routage alors que la partie action de l'URL sert de gestionnaire dynamique pour choisir un nom de système créé par l'utilisateur. c'est-à-direMessage MVC avec routage dynamique

http://mysite.com/Systems/[SystemName]/Configure, où [NomSystème] désigne le nom du système qu'ils souhaitent configurer.

Le procédé qui achemine le système est le suivant:

public ActionResult Index(string systemName, string systemAction) 
    { 

     ViewData["system"] = _repository.GetSystem(systemName); 
     if (systemAction != "") 
     { 
      return View(systemAction); 
     } 
     else 
     { 
      // No Id specified. Go to system selection. 
      return View("System"); 
     } 
    } 

Le procédé ci-dessus définit le système de configurer et de trajets à une méthode statique où la vue est affichée et une forme attend valeurs. La question que j'ai est que quand je crée ma vue de configuration, je perds mes valeurs postées quand le formulaire est soumis parce qu'il renvoie au contrôleur d'index ci-dessus. Comment puis-je déterminer si des données sont affichées lorsque je frappe mon contrôleur d'index ci-dessus pour que je puisse prendre une décision?

Merci! George

Répondre

1

Annoter la méthode du contrôleur qui gère le POST comme ceci:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index(string systemName, string systemAction) 
{ 
    // Handle posted values. 
} 

Vous pouvez avoir une autre méthode dans votre contrôleur qui gère la GETs:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Index(string systemName, string systemAction) 
{ 
    // No posted values here. 
} 

Notez que, bien que je ont copié la même méthode et les paramètres dans chaque cas, la signature pour la deuxième méthode (paramètres et types) devra être différente, de sorte que les deux méthodes ne sont pas ambiguës.

Le NerdDinner tutorial has examples de cela.

+0

Gardez à l'esprit bien sûr que ces deux noms d'actions sont ambigus même avec HttpPostAttribute/HttpGetAttribute. –

+0

Certes, vous devrez changer la signature sur l'un d'entre eux. –

+0

Je ne suis toujours pas sûr que cela résout mon problème. J'ai un contrôleur qui dirige tout à travers un point central et fait un choix dynamique sur une action. J'ai simplement besoin de garder la même signature de contrôleur d'index, mais j'ai besoin de la possibilité d'acheminer ce système à l'action appropriée, puis de déterminer si un post a eu lieu. Est-ce que ça a du sens? –