MVC, ajax, json poste de contrôleur de l'action méthode

Je suis en train de réaliser un JQuery AJAX appel à une méthode d'action du contrôleur qui contient un objet complexe comme un paramètre.
J'ai lu beaucoup de blogs et j'ai essayé plusieurs techniques tirées de ces. La poste-clé sur lequel j'ai construit ma meilleure tentative code (ci-dessous) est la stackoverflow post ici .

Je veux déclencher une asynchrone post, appelée lorsque l'utilisateur onglets en dehors d'un champ [pas une Forme d'économiser de l'après – comme l'a démontré dans d'autres exemples que j'ai trouvés].

Mon intention est de:

  • Instancier un objet sur le client [pas le ViewModel qui fournit le type de la Vue];
  • Remplir l'objet avec des données provenant de plusieurs champs dans la vue;
  • Convertir cet objet JSON;
  • Appeler la méthode d'action du contrôleur à l'aide de jQuery.Ajax méthode, en passant l'objet JSON.

Les résultats seront retournés comme un résultat JSON; et les données seront chargées dans les champs de la vue en fonction des résultats retournés.

Les problèmes sont:

  • Si la méthode d'action est attribuée à la HttpPost attribut, le contrôleur de l'Action méthode n'est pas appelée (même si l'appel AJAX type est réglé sur "POST").
  • Si la méthode d'action isattributed avec HttpGet, les valeurs des propriétés du paramètre sont null
  • La méthode ReadObject envoyait le message d'erreur: "Attend élément" racine " de l'espace de noms ".. Rencontrés "None" avec "nom d'espace de noms'".

J'espère que quelqu'un peut vous aider. Merci. Le Code ci-dessous:

Client fichier js

 var disputeKeyDataObj = {
     "InvoiceNumber": "" + $.trim(this.value) + "",
     "CustomerNumber": "" + $.trim($('#CustomerNumber').val()) + ""
  };

  var disputeKeyDataJSON = JSON.stringify(disputeHeadlineData);      

  $.ajax({
     url: "/cnr/GetDataForInvoiceNumber",
     type: "POST",
     data: disputeKeyDataJSON,
     dataType: 'json',
     contentType: "application/json; charset=utf-8",
     success: EnrichedDisputeKeyData(result)
  });


Action de Filtre et de classe pour le type associé à la méthode d'Action de paramètre

 [DataContract]  
 public class DisputeKeyData  
 {  
    [DataMember(Name = "InvoiceNumber")]  
    public string InvoiceNumber { get; set; }

    [DataMember(Name = "CustomerNumber")]
    public string CustomerNumber { get; set; }
 }  

Méthode d'Action sur le contrôleur

  //[HttpPost]
  [ObjectFilter(Param = "disputeKeyData", RootType = typeof(DisputeKeyData))]  
  public ActionResult GetDataForInvoiceNumber(DisputeKeyData disputeKeyData)  
  {  
     //Blah!  
     //....  
     return Json(disputeKeyData, JsonRequestBehavior.AllowGet);  
  }