2009-09-24 7 views
0

Je construis une application asp.net mvc qui utilise la route URL par défaut «/ {contrôleur}/{action}/{id}».net types mvc personnalisés dans urls

Mon problème est le dernier élément de cette route, l'identifiant. Le framework mvc convertit automatiquement tout ce qui est mis dans l'ID en fonction du type du paramètre déclaré dans l'action.

exemple:

url:/MyController/myaction/1

public class MyController: Contrôleur {

public ActionResult myaction(int id) 
    { 
     // it works id == 1 
    } 

}

Mais si je déclare dans l'action un paramètre d'un type personnalisé, le framework mvc est incapable de mapper la dernière partie de la route vers le paramètre.

exemple:

url:/MyController/myaction/xpto

public class MyController: Contrôleur {

public ActionResult myaction(MyType id) 
    { 
     // it fails to cast "xpto" to my type 
    } 

}

Où dois-je puiser dans le cadre d'enseigner comment le faire?

Répondre

2

La liaison des valeurs des données de route à un argument d'action est gérée par le classeur de modèle. Le classeur de modèle par défaut est, sans surprise, DefaultModelBinder. Si ce type ne lie pas la valeur de votre itinéraire à votre type de MyType, vous avez deux choix:

  • Changer la date à laquelle vous passez dans la route de sorte que DefaultModelBinder peut le convertir en une instance de MyType sans modification ou
  • Écrivez un classeur de modèle personnalisé et définissez-le en tant que classeur modèle pour votre type MyType. Si vous vous intéressez à Google ASP.NET MVC et aux classeurs de modèles, vous trouverez des exemples.
+0

Très bien! C'est tout! Je pensais que le Model Binder travaillait uniquement pour Forms. – Gnomo

Questions connexes