2010-09-23 4 views
2

garderez ce aussi simple possible: -l'action ASP.Net MVC formulaire en retour Voir

j'ai un un contrôleur qui retourne soit viewA ou viewB - par exemple

[HttpPost] 
public ActionResult ViewA(BlahModel model) 
{ 
    if (isTrue) 
     return View(model); 
    else 
     return View("ViewB", model); 
} 

...

Le problème est que je viewB a une forme sur elle. Et ce qui se passe, c'est que si elle est renvoyée, l'attribut action de la balise pointe toujours vers ViewA.

/MyControllerName/ViewA 

Je pensais que je pouvais faire quelque chose comme ceci:

using (Html.BeginForm("ViewB","MyControllerName")) 

Mais cela renvoie l'URL suivante dans le balisage:

/ViewB?action=ViewB&controller=MyControllerName 

Comment puis-je obtenir le code HTML Helper pour revenir correctement le suivant?

/MyControllerName/ViewB 

Un grand merci

MISE À JOUR

Ce fut en effet causé par un héritage laid routage du moment où le projet était à mi-chemin entre WebForms et MVC

+0

Quel HTML est rendu dans ViewB? Est-ce que la forme dans ViewB a action = "get" –

+0

Que fait "<% = Url.Action (" ViewB "," MyControllerName ")%>' générer? – Charlino

Répondre

2

Il est question dans la table de routage . Le moteur de routage ne peut pas trouver de réponse à cette action \ controller et met simplement ces paramètres à querystring.

2

Avez-vous une action nommée ViewB? Si ce n'est pas le cas, le moteur de routage ne peut pas comprendre ce que vous demandez et ajoute des variables supplémentaires à la chaîne de requête de la cible. Une action qui rend deux vues différentes est correcte, mais si vous voulez ViewB à POST quelque part différent de ViewA, alors vous avez besoin d'une action dans votre contrôleur pour ViewB.

EDIT: D'autres précisions, si le ViewAl'action doit toujours être appelé, alors vous n'avez pas besoin ViewBl'action, et votre ViewBvue devrait juste republier à l'ViewAl'action.

Si la ViewBvue doit exécuter une action différente que votre ViewAvue, vous devez créer une autre action pour ViewB à POST à.

Désolé pour tout le gras, mais je voulais juste être clair sur les différences entre les actions et les vues.