2009-11-05 7 views
0

Salut, j'ai une action dans mon contrôleur, j'attends que ModelBinder lier les post-données entrantes à mon paramètre d'action, mais il ne le fait pas, je ne sais pas. Je les lie manuellement avec TryUpdateModel() mais je ne veux pas l'utiliser. Les noms de propriété et les données postdatées sont les mêmes pour lesquelles ils ne peuvent pas les lier?ModelBinder ne lie pas les valeurs

public class User 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 
} 

public ActionResult Update(User user) 
{ 
    // TODO 
} 

Mon code javaScript qui envoient des données à mon action:

newData = { 
    "FirstName":"Yucel" 
    "LastName": "Akpınar", 
    "Email": "yucelakpinar", 
    "Password": "123456" 
}; 

    $.ajax({ 
     type: "POST", 
     dataType: "json", 
     data: newData, 
     url: "/Profile/Update", 
     success: function() { 
      debugger; 
     } 
    }); 

Répondre

0

La raison pour laquelle il ne fonctionne pas parce que la charge utile de votre demande est un objet JSON, qui le classeur modèle actuel n'est pas capable d'analyser (en réalité, le classeur modèle ne récupère aucune de ses valeurs, ce que fait le fournisseur de valeur). Nous avons rendu ce scénario possible dans v2, mais pour qu'il fonctionne dans v1, vous devez ajouter le support pour vous-même.

+0

Je suis en train de faire la même chose pour une autre méthode d'action que je vous envoie des données JSON, ModelBinder lier les valeurs avec succès, mais dans une autre action, il ne: S J'utilise MVC v2p2 – Yucel

0

Je résous le problème. La raison est ModelState n'est pas valide.

En raison de la Attribut de validation ModelBinder ne marche pas lier les propriétés s'il y a une situation NotValid ...

[MetadataType(typeof(UserMetaData))] 
public partial class User 
{ 
    public string FirstName { get; set; } 
    .... 
    .... 
} 

public class UserMetaData 
{ 
    [Required] 
    [RegularExpression("[a-zA-Z]{2,30}")] 
    public string FirstName { get; set; } 
    .... 
    .... 
Questions connexes