2009-12-29 6 views
4

J'ai un formulaire qui ressemble à la maquette suivante (photoshopped de Facebook) pour notre vue Messages sur notre site ASP.NET MVC. Je cherche à obtenir la fonctionnalité "Mark as Unread" et "Delete" fonctionnant pour un formulaire qui ressemble à ceci. J'essaie de comprendre comment je peux le faire avec des formulaires html.Comment puis-je modifier l'action d'un formulaire en fonction du bouton sur lequel vous avez cliqué dans ASP.NET MVC?

Comment est-ce que je fais frapper le "Marquer comme non lu" soumettre à une forme url, et "Supprimer" soumettre le même formulaire à une autre URL?

Si vous cliquez sur "Marquer comme non lu", je voudrais soumettre le formulaire à "/ Messages/MarkUnread" et si c'est le bouton "Supprimer", je voudrais soumettre le formulaire à "/Messages/Supprimer ". Je voudrais que cela fonctionne sans javascript, et une fois que c'est le cas, j'ajouterai le plugin jQuery forms pour qu'il fasse un ajax si JS est activé, sinon il fera un post normal.

Répondre

4

Je suis un newb MVC total, mais je crois que le formulaire peut seulement soumettre à une action.

Cela dit, dans l'action que vous envoyez des messages, je sais que vous serez en mesure de dire quel bouton a été cliqué et gérer les choses de façon appropriée, par exemple:

[AcceptVerbs(HttpVerbs.Post)] 
    public ViewResult Index(string btnCompose, string btnMarkAsRead, string btnDelete) 
    { 
     if (btnCompose != null) 
     { 
      // Compose was clicked, handle appropriately 
     } 
     else if (btnMarkAsRead != null) 
     { 
      // Mark As Read was clicked, handle appropriately 
     } 
     else if (btnDelete != null) 
     { 
      // Delete was clicked, handle appropriately 
     } 
    } 

Cela suppose que vos éléments HTML sont nommés " btnDelete ", etc

1

Comme josh a dit, une forme - une action pour sans javascript. Les éléments de soumission (ou les éléments de bouton) peuvent avoir le même nom mais des valeurs différentes pour que vous sachiez que vous avez appuyé sur un élément. Pour différentes actions, vous pouvez effectuer une action qui soit Demande la requête en fonction du bouton, soit vous pouvez mettre formdata dans le dictionnaire TempData et retourner RedirectToAction() en fonction de la valeur du bouton pressé. Le dernier sera un bon point de départ pour ajaxifier plus tard.

0

Josh est correct, dans MVC, avec JavaScript out, une forme = une seule action

Vous pouvez utiliser l'action de Josh avec un modificateur, ajoutez le FormCollection en tant que paramètre. Vous devez juste vous assurer que chaque case à cocher a un nom unique et est facile à identifier. IE: si l'ID du message est de 20, faire le nom CheckBox chk20

[AcceptVerbs(HttpVerbs.Post)] 
public ViewResult Index(string btnCompose, string btnMarkAsRead, string btnDelete, FormCollection formCollection) 
{ 
    if (btnCompose != null) 
    { 
    //Return the compose View 
    } 
    else if (btnMarkAsRead != null) 
    { 
    // Mark As Read was clicked, handle appropriately 
    //Loop through every key in the collection looking for stuff that starts with chk 
    foreach (string key in formCollection.Keys) 
    { 
     if (key.StartsWith("chk")) 
     { 
     //Do Mark Read Here 
     } 
    } 
    } 
    else if (btnDelete != null) 
    { 
    //Loop through every key in the collection looking for stuff that starts with chk 
    foreach (string key in formCollection.Keys) 
    { 
     if (key.StartsWith("chk")) 
     { 
     //Do Mark Delete Here 
     } 
    } 
    } 
} 

Quelque chose comme ça peut fonctionner ... Vous devrez essayer de voir. J'utiliserais jQuery, et je construirais moi-même un post sur l'action correcte.

Questions connexes