mercredi 17 février 2010

Respect nomenclature MVC

Bonjour,

Un petit billet rapide pour vous méfier des syntaxes sur MVC. En effet, j'ai été confronté a un problème très bête, mais lorsque l'on n'est pas habitué a MVC on peux chercher longtemps l'erreur.

Voici l'erreur :
System.ArgumentException: The parameters dictionary contains a null entry for parameter 'idCategorie' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Cat(Int32)' in 'SiteArticle.UI.Controllers.ArticleController'. To make a parameter optional its type should be either a reference type or a Nullable type.
Nom du paramètre : parameters

Accès :
http://localhost:53809/Article/Cat/3

Code :
public ActionResult Cat(int idCategorie)
{
    IEnumerable< article > IEArticle = this._service.ListArticles(idCategorie);

    if (IEArticle.Count() > 0)
        return View(IEArticle);
    else
        return View("NotFound");
}

En fait, le problème est simpliste... dans votre route (Global.asax) vous avez défini la règle
suivante (enfin MVC de microsoft ?!) :
routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Article", action = "Index", id = "" }  // Parameter defaults
);

Depuis ce routage, le nom de la variable est obligatoirement "id" si vos méthodes de vos controllers ne respectent pas cette nomenclature vous aurez le message d'erreur.

C'est tout bete, mais on peux chercher parfois pendant des heures pourquoi on a ce type de probleme !

Enjoy

Aucun commentaire:

Enregistrer un commentaire