Guillaume Lacasa
Les bases d’ASP.NET MVC
Découvrez avec ASP.NET MVC une nouvelle façon de créer des sites webs de manière structurée suivant le pattern Modèle-Vue-Contrôleur.
Par Guillaume Lacasa publié le 14/10/2009 à 21:48, lu 2064 fois, 7 pages
 6 | Actions faites par l’utilisateur
Jusqu’à présent, nous avons uniquement vu comment envoyer des données du serveur vers le client, mais pas comment l’utilisateur peut interagir avec votre site. Avec MVC, les postbacks n’existent plus, on revient aux sources du protocole http avec des formulaires html et des requêtes Post.
Faisons un rappel rapide sur les méthodes http ; les deux qui nous intéressent sont le GET et le POST.
La méthode GET sert à demander une ressource au serveur web. Il s’agit uniquement de l’appel d’une URL qui renvoie une réponse, une requête GET ne doit pas avoir d’effet sur le serveur.Au contraire, la méthode POST est utilisée pour que le client envoie des données au serveur, c’est cette méthode qu’il faudra utiliser si on veut qu’un utilisateur ajoute ou modifie des données sur le site.
La différentiation de ces deux types de requêtes est importante. Si en théorie rien n’empêche l’utilisation d’une requête GET pour mettre à jour des données (ou d’un POST pour uniquement lire des données, comme c’est d’ailleurs le cas lorsqu’en asp.net on utilise la pagination par défaut des GridView), cela peut avoir des impacts négatifs sur le site :
  • Généralement les robots se contentent de suivre tous les liens d’un site web, mais sans valider de formulaire (je parle ici des bots légitimes, par exemple ceux utilisés par Google pour indexer les sites web). Si on utilise une requête GET pour mettre à jour des données, les robots risquent de passer par ces liens, et donc de modifier vos données. Le problème est le même si l’un de vos utilisateurs mets une page en favori : il faut absolument que le lien pointe vers une page de votre site en lecture seule, et pas vers une page qui modifie des données.
  • Pour le POST, on a le problème inverse : ici les bots ne verront pas vos pages. Si vous comptez sur Google pour indexer votre site web, vous lui masquez ainsi une partie de votre site, ce qui aura un impact négatif sur le référencement.
C’est donc cette différence entre le GET et le POST qu’on va utiliser avec ASP.NET MVC pour pouvoir proposer aux utilisateurs du site d’envoyer des informations : les actions par défaut répondront aux requêtes de type GET, et lorsqu’on en aura besoin on définira certaines actions qui répondront aux requêtes de type POST.
On va prendre un exemple classique d’un blog, où un utilisateur veut ajouter un article. Le blogueur va se retrouver sur une page où il pourra écrire son article, puis lorsqu’il validera une requête sera faite au serveur qui enregistrera l’article.
Dans cet exemple, on va avoir droit à une requête GET sur l’action « Create ». En effet, cette première requête renvoie le formulaire d’ajout d’article, et n’a aucun effet sur le serveur.Lorsque l’utilisateur valide l’article, cette fois il envoie les données au serveur, c’est donc un POST qui est fait sur l’action « Create ».
Nous aurons donc dans notre contrôleur deux actions Create, l’une qui reçoit une requête GET, l’autre qui reçoit une requête POST ainsi que les informations envoyées par l’utilisateur. Dans notre code, ça se présentera comme ça :
On a une première action « Create » qui se contente de renvoyer sur la vue de création d’article

public ActionResult Create()

{

    return View();

}

Dans la vue, on a un formulaire dans lequel l’utilisateur pourra écrire son article. On utilise ici le HtmlHelper, qui nous a déjà servi pour faire des liens, pour créer le formulaire :

<% using (Html.BeginForm())

   {%>

 

    <%= Html.TextBox("Title") %><br />

    <%= Html.TextArea("Content") %>

 

    <input type="submit" value="Valider" />

<% } %>

Html.BeginForm() permet de créer notre formulaire Html. Le fait d’utiliser le using permets de repérer le début et la fin du formulaire : le </form> sera positionné à l’endroit où se trouve l’accolade fermante du using.
Lorsqu’on clique sur le bouton submit, le formulaire envoie une requête POST à l’action « Create ». Cette fois, ce n’est pas la même action qui doit être appelée que lorsqu’on a fait un GET, on a donc une nouvelle action, qui n’acceptera que les requêtes POST :

[AcceptVerbs(HttpVerbs.Post)]

public ActionResult Create(Article article)

{

    try

    {

        Context.SaveArticle(article);

 

        return RedirectToAction("Details", new { id = article.Id });

    }

    catch

    {

        return View();

    }

}

Cette méthode reçoit un objet de type Article en paramètre, cet objet a été créé par MVC, à partir des données du formulaire, dont les noms doivent correspondre aux propriétés de la classe Article.
 
» Démarrer une discussion