2012-11-28 9 views
5

`Saluti,JQuery Ajax e inserimento di oggetti complessi multipli su asp.net MVC Controller

Avendo problemi nella registrazione di più parametri su un metodo di controller mc.

controller... 
[HttpPost] 
public ActionResult SaveSomething(SomeDomainObject domainObject, bool anOption) 
{ 
} 

Ajax Code... 
function performPostData(postDataOptions,closeWindow) { 
     $.ajax({ type: postDataOptions.httpVerb, 
      url: postDataOptions.url, 
      datatype: "json", 
      traditional: true, 
      data: postDataOptions.data(), 
      success: function() { 
       if (closeWindow) { 
        var window = $('#window').data("kendoWindow"); 
        window.close();    
       } 
      }, 
      error: function (xhr, status, error) { 
       var msg = JSON.parse(xhr.responseText); 
       var validator = $("#editBase").kendoValidator().data("kendoValidator"), 
       status = $(".editValidationStatus"); 
       var err = msg.Message; 
       status.text(err).addClass("invalid"); 
      } 
     }); 
    } 

JScript function to format data... 

function GetPostData() 
{ 
    var _domainObject={    
      prop1: 1, 
      prop2: 2, 
      prop3: 3      
     }; 
     return JSON.stringify({ domainObject:_domainObject,anOption: true}); 
} 

io vedendo in acquisizione di rete che questo è il corpo della richiesta:

{"domainObject":{"prop1":1,"prop2":2,"Prop3":3},"anOption":true} 

Il controller genera la seguente eccezione:

The parameters dictionary contains a null entry for parameter 'anOption' of non-nullable type 'System.Boolean' for method 'System.Web.Mvc.ActionResult SaveSomething(Domain.Data.SomeDomainObject, Boolean)' in 'Reports.Controllers.TestController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameter name: parameters 

ho filando le ruote per ore cercando di ottenere un oggetto dominio semplice e un altro parametro di tipo bool da serializzare e passare al mio controller. Qualche idea?

+0

La prossima cosa che ho provato è creare un oggetto SaveObjectRequestObject come SaveObjectRequest: DomainObject {public bool AnOption {get; set;}}. Questo in realtà è tracciato attraverso il controller ma le mie proprietà dell'oggetto di base non vengono mai impostate. –

risposta

5

Sembra che manchi il parametro del tipo di contenuto nella chiamata ajax jquery. È necessario impostare in modo esplicito come JSON, come in questo pezzo di codice:

function performPostData(postDataOptions,closeWindow) { 
    $.ajax({ type: postDataOptions.httpVerb, 
     url: postDataOptions.url, 
     datatype: "json", 
     contentType: "application/json; charset=utf-8", 

     ...rest of your code 

altrimenti si ottiene il valore di default (vedi http://api.jquery.com/jQuery.ajax/):/

applicazione x-www-form-urlencoded ; charset = UTF-8

+0

Si scopre che dopo aver appiattito la richiesta del controllore obejct out, ho potuto rintracciare il controller. Quindi rimuovere il return JSON.stringify ({request: SaveDomainObjectRequest}); e restituendo solo alcuniDomainObjectRequest ha funzionato. Segnerò la risposta come risposta, tuttavia, non ho il lusso di tempo per tornare indietro e testare :( –

+0

Questa risposta ha risolto i miei problemi.Per qualche ragione i valori predefiniti di jQuery non sono abbastanza buoni per il mio controller MVC da legare collezioni complesse: semplicemente l'invio della variante JSON (come descritto in questo post) ha reso tutto perfettamente vincolante. –

Problemi correlati