2009-05-30 63 views
1

Je semble avoir un problème avec le fait que MVC remplisse mon paramètre de modèle personnalisé lorsqu'il est appelé via GET au lieu de POST.ASP.NET MVC ModelBinder ne fonctionne pas avec les requêtes GET et/ou jQuery AJAX?

J'ai un extrait de code JavaScript qui appelle dans une action comme ceci:

$.getJSON('<%= Url.Action("DoSearch") %>' + location.search, 
    function(data) { 
     if (data.Result == "OK") { 
      location.href = location.href; 
     } 
    }); 

Ce qu'il fait, est essentiellement appeler une action séparée, en lui transmettant les mêmes querystrings que la page d'appel. Ensuite, si le résultat est "OK", il actualise la page en cours.

L'action est définie comme suit:

public ActionResult DoSearch(SearchParameters searchParameters) 

Le modèle est le suivant:

public class SearchParameters 
{ 
    public string Query; 
    ... 
} 

URL d'appel (vérifié avec firebug) est comme /DoSearch?Query=some+query. (Également essayé /DoSearch?searchParameters.Query=some+query sans succès)

Peu importe ce que j'ai essayé, mon paramètre est toujours aussi vide (non nul, juste tous les paramètres en cours d'initialisation à leurs valeurs par défaut)

Si je définis l'action Comme ceci à la place:

public ActionResult DoSearch(string Query, ...) 

Puis mes paramètres sont remplis correctement. Pas avec le modèle cependant.

Je suppose:

a) soit peuplant le modèle d'objet ne fonctionne pas pour les requêtes GET.

b) Je fais quelque chose de mal

Toutes les idées? Merci.

Répondre

6

Vous devez disposer de propriétés publiques pour lier une classe.

remplacer

public string Query; 

avec

public string Query{get;set;} 

Au moins c'est ce que je devais faire pour que cela fonctionne dans mon projet .. Je ne sais pas si vous avez un autre problème aussi bien . Oh et moi avons aussi utilisé GET, donc ça devrait marcher.

Ceci est ma classe Paramètres:

public class Parameters 
{ 
    public int? page { get; set; } 
    public int? pageSize { get; set; } 
    public string[] columnsToDisplay { get; set; } 
    public string columnToSort { get; set; } 
    public bool? descending { get; set; } 
} 

ne se lie pas avec les champs.

+0

Oups, c'est exact. Ça fonctionne maintenant. J'aimerais qu'il y ait plus de documentation à ce sujet. Merci beaucoup. – andreialecu

+0

Belle réponse Thomas. +1 - Félicitations! –

+0

Le manque de documentation est appelé "convention". :) –