2012-11-28 8 views
5

`Selamlar,JQuery Ajax ve bir mc kontrol yöntemine birden çok parametre gönderme MVC Kontrol

sahip sorun asp.net için birden çok karmaşık nesnelerin nakil.

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}); 
} 

bu istek organıdır ağ yakalama görünce:

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 

ben çalışıyorum saatlerce benim tekerlekler dönmeye edilmiştir:

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

kontrolör şu istisna yükseltir Basit bir etki alanı nesnesini ve serileştirilecek ve denetleyicime iletilecek başka bir tür boole parametresi elde edin. Herhangi bir fikir?

+0

denedim sonraki şey SaveObjectRequest gibi SaveObjectRequestObject oluşturmaktır: DomainObject {public bool anoption {get; set;}}. Bu aslında denetleyiciye doğru takip edildi, ancak temel nesne özelliklerim asla ayarlanmadı. –

cevap

5

jquery ajax çağrısında içerik türü parametresini kaçırıyor gibi görünüyor.

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

     ...rest of your code 

onun varsayılan değeri elde (http://api.jquery.com/jQuery.ajax/ bakınız) olacaktır: Açıkça bu kod parçası olduğu gibi, json olarak ayarlamak gerekir

application/x-www-form-urlencoded ; charset = UTF-8

+0

Denetleyici isteğini düzleştirdikten sonra denetleyiciye kadar izleyebileceğimi ortaya koyuyor. Daha sonra geri dönüş JSON.stringify ({request: SaveDomainObjectRequest}) kaldırılıyor; ve sadece bazıDomainObjectRequest dönen çalıştı. Cevabınızı bir cevap olarak işaretleyeceğim, ancak geri dönme ve test etme zamanının lüksüne sahip değilim :( –

+0

Bu cevap sorunlarımı çözdü.JQuery varsayılanları MVC denetleyicimin bağlanması için yeterince iyi değil. karmaşık koleksiyonlar.Sadece JSON varyantı göndererek (bu yazıda anlatıldığı gibi) her şeyi mükemmel bir şekilde bağladım. –

İlgili konular