Tenir compte de cette MapRoute:objets personnalisés comme arguments dans les méthodes de régulation définies par MapRoutes
MapRoute(
"ResultFormat",
"{controller}/{action}/{id}.{resultFormat}",
new { controller = "Home", action = "Index", id = 0, resultFormat = "json" }
);
Et c'est la méthode de commande:
public ActionResult Index(Int32 id, String resultFormat)
{
var dc = new Models.DataContext();
var messages = from m in dc.Messages where m.MessageId == id select m;
if (resultFormat == "json")
{
return Json(messages, JsonRequestBehavior.AllowGet); // case 2
}
else
{
return View(messages); // case 1
}
}
Voici les scénarios d'URL
Home/Index/1
ira à case 1Home/Index/1.html
ira au cas 1Home/Index/1.json
ira au cas 2
Cela fonctionne bien. Mais je déteste vérifier pour les chaînes. Comment implémenter un enum à utiliser comme paramètre resultFormat
dans la méthode du contrôleur?
Certains pseudo-code pour expliquer l'idée de base:
namespace Models
{
public enum ResponseType
{
HTML = 0,
JSON = 1,
Text = 2
}
}
Le MapRoute:
MapRoute(
"ResultFormat",
"{controller}/{action}/{id}.{resultFormat}",
new {
controller = "Home",
action = "Index",
id = 0,
resultFormat = Models.ResultFormat.HTML
}
);
La signature de la méthode de commande:
public ActionResult Index(Int32 id, Models.ResultFormat resultFormat)
Je ne peux pas travailler votre exemple de code. J'ai posté une nouvelle question ici: http://stackoverflow.com/questions/1662216/return-jsonresult-using-an-actionfilter-on-a-controller Serait génial si vous jetez un coup d'oeil – roosteronacid
Quels problèmes particuliers aviez-vous? Comme suggéré comme réponse dans votre autre question, vous devez remplacer la méthode OnActionExecuted au lieu de OnResultExecuting, car cette dernière s'exécute avant l'action du contrôleur et le modèle sera toujours 'null'. –