doSimple MVC avec ASP.NET

Dernière modification le 02 May 2006

MVC avec ASP.NET

Le framework ASP.NET n’incite pas particulièrement à la séparation stricte de type Modèle, Vue, Contrôleur. Il est toutefois relativement simple de la réaliser. Ce document donne un exemple concret d’une application ASP.NET MVC programmée en C#.

Dans le framework ASP.NET la vue est un fichier HTML agrémenté de balises ASP. Le contrôleur et le modèle sont en général mélangés dans un objet qui dérive de la classe System.Web.UI.Page.

Pour obtenir une séparation strict MVC il suffit de découpler proprement le contôleur et le modèle. Le contrôleur dérivera de la classe Page :

Model View Controller

Télécharger les fichiers de l’application.

Capture d'écran de l’application finale

Comme exemple d’application je propose une seule page qui permet de réaliser les opérations CRUD (Create, Read, Update, Delete) sur 4 tables. Cette application permet de gérer des produits, des clients, et des commandes.

capture d'écran de l’application

La vue

L’objet ASP nommé DataGrid permet facilement de représenter une table de données ainsi que d’indiquer les actions associées aux enregistrements de cette table. On insère ces objets dans la page avec une syntaxe XML. Ils seront ensuite transformés en code HTML lors de la visualisation :

<asp:datagrid id="table_clients" runat="server" AutoGenerateColumns="False"
OnEditCommand="ClientsEditHandler"
OnCancelCommand="ClientsCancelHandler"
OnUpdateCommand="ClientsUpdateHandler"
OnDeleteCommand="ClientsDeleteHandler">
 <Columns>
  <asp:BoundColumn DataField="pkey" HeaderText="Numéro" />
  <asp:BoundColumn DataField="nom" HeaderText="Nom" />
  <asp:BoundColumn DataField="prenom" HeaderText="Prénom" />
  <asp:EditCommandColumn EditText="Editer" ButtonType="PushButton"
     UpdateText="Valider" CancelText="Annuler" HeaderText="Actions"/>
  <asp:ButtonColumn ButtonType="PushButton" Text="Supprimer" 
     HeaderText="Supprimer" CommandName="Delete" />
 </Columns>
</asp:datagrid>

Les objets DropDownList permettent eux de présenter une liste déroulante :

<asp:DropDownList id="list_clients" runat="server" 
  datavaluefield="pkey" datatextfield="nom"  />

Télécharger le fichier de vue : index.aspx

Le modèle

L’implémentation de ce modèle utilise la base de données qui est utilisée dans l’article sur les fonctionnalités de PostgreSQL.

Le modèle travaille sur ces 4 tables de données (clients, commandes, produits, et liaison produit commande). Il fourni toutes les fonctions CRUD (Create, Read, Update, Delete) nécessaires à la gestion et à l’affichage des ces tables. Les fonctions de lecture des données sont utilisées afin de remplir les DataGrid et les DropDownList :

public static DataSet GetClients()
public static DataSet GetProduits()
public static DataSet GetCommandes()
public static DataSet GetProduitCommande()

Cet exemple utilise une approche peu orientée objet. Il serait préférable, dans une implémentation plus évoluée, de créer des classes d’objets correspondantes à notre base de données.

Télécharger le fichier de gestion du modèle : ApplicationModel.cs

Le contrôleur

Ce contrôleur implémente deux fonctions héritées de la classe System.Web.UI.Page. Il s’agit de Page_Load et Page_PreRender. Page_Load est apellé en premier lieu puis Page_PreRender est apellé avant le rendu final de la page ASP.

Ces fonctions sont apellées dans l’ordre suivant :

Le rendu des DataGrid et des DropDownList via les DataSet est d’une grande simplicité :

DataSet ds = ApplicationModel.GetClients();
table_clients.DataSource = ds;
table_clients.DataBind();
list_clients.DataSource = ds;
list_clients.DataBind();

Télécharger le fichier de gestion du contrôleur : ApplicationController.cs

Utilisation de cette application avec Mono

Pour utiliser cette application vous devez compiler les fichiers ApplicationModel.cs et ApplicationController.cs en fichiers bibliothèques (DLL) puis les placer dans le dossier bin de votre répértoire Web :

mcs ApplicationModel.cs -r:System,System.Data,Npgsql -t:library
mcs ApplicationController.cs -r:System,System.Data,System.Web,ApplicationModel -t:library

Il faut également ajouter le fichier Npgsql.dll qui permet la connexion à la base de données PostgreSQL.

Liens

Auteur
Batiste Bieler
Licence
LGPL