J'ai une vue appelée Associations qui a une liste déroulante et un bouton. Lorsque l'utilisateur sélectionne une option et appuie sur submit, je veux qu'il passe à Association/{associationKey}. L'association doit travailler sur get et post.simple formulaire MVC post et url question de routage .... J'espère
Actuellement, avec le code ci-dessous, lorsque le formulaire est publié, il va à l'association et affiche l'enregistrement correct, mais il n'ajoute pas l'associationKey à l'URL.
Je reçois:
au lieu de:
http://localhost/Association/202
Si je navigue manuellement http://localhost/Association/202 tout fonctionne parfaitement, alors publierez travaillent tous deux bien .. .. Je veux juste la clé dans l'URL après un post!
Sûrement il doit y avoir quelque chose de super simple que je fais mal. Code pertinent ci-dessous.
Merci!
ASSOCIATIONS Vue:
<% Html.BeginForm("Association", "Staff", FormMethod.Post); %>
<%:Html.DropDownList("associationKey", new SelectList(Model.Associations.ToList(), "AssociationKey", "LegalName"))%>
<input type="submit" value="Edit The Selected Record" />
<% Html.EndForm(); %>
contrôleur PERSONNEL:
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult Association(int associationKey)
{
return View("Association", new AssociationViewModel(associationKey));
}
Global.asax:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Default", "{action}", new { controller = "Staff", action = "Default" });
routes.MapRoute("Associations", "Associations", new { controller = "Staff", action = "Associations" });
routes.MapRoute("Association", "Association/{associationKey}", new { controller = "Staff", action = "Association" });
}
modèle de vue ASSOCIATION:
public class AssociationViewModel
{
public Repository db = new Repository();
public Association Association {get; private set; }
public List TelephoneTypes { get; private set; }
public AssociationViewModel(int associationKey)
{
Association = db.AssociationById(associationKey);
TelephoneTypes = db.ListTelephoneTypes().ToList();
}
}
La vue Association est POSTée à partir de la vue Associations, il n'y a donc pas d'AssociationViewModel à transmettre à la vue Association. La seule chose que j'ai est l'associationKey. – Blackcoil
En divisant en deux actions de contrôleur, et que votre action POST reçoive un paramètre AssociationViewModel, le framework instanciera et liera le modèle pour vous et le passera à la méthode d'action. Essayez-le et mettez un point d'arrêt et voyez ce que vous obtenez. Assurez-vous simplement d'ajouter un constructeur vide à la classe AssociationViewModel en premier. –
La solution était double. D'abord, je me suis scindé en actions GET et POST comme vous l'avez suggéré, et j'ai passé la commande FormCollection au POST, puisque l'associationKey est là. De plus, mes itinéraires étaient dans le mauvais ordre. Les routes par défaut viennent en dernier, les routes spécifiques viennent en premier. – Blackcoil