J’ai créé un classeur de modèle MVC personnalisé qui est appelé pour chaque HttpPost
entrant sur le serveur. Mais ne pas être appelé pour les demandes HttpGet
.
GET
? Si oui, qu’est-ce que j’ai manqué? QuerySsortingng
partir d’une demande GET
? Voici ma mise en œuvre …
public class CustomModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { // This only gets called for POST requests. But I need this code for GET requests. } }
Global.asax
protected void Application_Start() { ModelBinders.Binders.DefaultBinder = new CustomModelBinder(); //... }
J’ai examiné ces solutions, mais elles ne fonctionnent pas vraiment pour ce que je recherche:
TempData
?Name=John&Surname=Doe
) Merci à @Felipe pour l’aide. Juste au cas où quelqu’un lutterait avec la même chose, j’ai appris:
GET
demandes GET
DefaultModelBinder
GET
requêtes GET
, ce qui est logique lorsque vous y réfléchissez). Supposons que vous ayez votre propre type que vous souhaitez lier.
public class Person { public int Id { get; set; } public ssortingng Name { get; set; } public int Age { get; set; } // other properties you need }
Vous pouvez créer une liaison de modèle personnalisée pour ce type spécifique, héritée de DefaultModelBinder
, par exemple:
public class PersonModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var request = controllerContext.HttpContext.Request; int id = Convert.ToInt32(request.QuerySsortingng["id"]); ssortingng name = request.QuerySsortingng["name"]; int age = Convert.ToInt32(request.QuerySsortingng["age"]); // other properties return new Person { Id = id, Name = name, Age = age }; } }
Dans le fichier Global.asax de l’événement Application_Start
, vous pouvez enregistrer cette liaison de modèle, par exemple:
// for Person type, bind with the PersonModelBinder ModelBinders.Binders.Add(typeof(Person), new PersonModelBinder());
Dans la méthode BindModel
de PersonModelBinder
, vérifiez que vous avez tous les parameters dans la chaîne de requête et leur donnez le traitement idéal.
Depuis que vous avez cette méthode d’action:
public ActionResult Test(Person person) { // process... }
Vous pouvez accéder à cette action avec une URL ressemblant à ceci:
Test?id=7&name=Niels&age=25