2012-12-21 58 views
1

我将表单数据发布到我的web服务时遇到了问题。当我调试Web服务时,参数messagepost的计数为1,但对象数据为空,但是当我查看请求中的对象时,我可以看到该对象已填充。我一直在寻找并且绞尽脑汁一个小时,并且看不到我的工作。所以也许这里有人可以帮助我。将数组发布到c#web服务对象问题

的Javascript

function getEmptyLeg() { 

     var chkTail = $("#elTail").is(':checked'); 
     var chkType = $("#elType").is(':checked'); 
     var chkNBAA = $("#chkNBAA").is(':checked'); 
     var chkCategory = $("#elCategory").is(':checked'); 

     var itineraryList = new Array(); 

     var itinerary = new Object(); 
     itinerary.Time = ""; 
     itinerary.Arrival = $("#elTo").val(); 
     itinerary.Departure = $("#elFrom").val(); 
     itinerary.ArrivalDate = getDate("#elEndDate"); 
     itinerary.DepartureDate = getDate("#elStartDate"); 
     itineraryList.push(itinerary); 

     var messagepost = new Object(); 
     messagepost.Types = ""; 
     messagepost.Categories = ""; 
     messagepost.ShowTail = chkTail; 
     messagepost.ShowType = chkType; 
     messagepost.SendToNBAA = chkNBAA; 
     messagepost.DirectoryAircraft = false; 
     messagepost.ShowCategory = chkCategory; 
     messagepost.Price = $("#elPrice").val(); 
     messagepost.NBAAEmail = $("#txtEmail").val(); 
     messagepost.MessageItinerary = itineraryList; 
     messagepost.AircraftID = $("select#elAircraft").val();      

     return messagepost; 
    } 

function saveMessage() { 

     var options = ""; 
     var type = $("#hdfType").val(); 
     var userid = $('#<%= hdfUserID.ClientID %>').val(); 
     var message = $("#<%= txtMessage.ClientID %>").val(); 
     var timezone = $('#<%= hdfTimezone.ClientID %>').val(); 

     $('#<%= sltUsers.ClientID %> option:selected').each(function (i) { 
      options += $(this).val() + ","; 
     }); 

     var messagepost = new Array(); 
     messagepost.push(getEmptyLeg()); 


     $.ajax({ 
      type: "Post", 
      async: false, 
      dataType: "json", 
      contentType: "application/json; charset=utf-8", 
      url: "/Resources/MessageWebService.asmx/SaveMessage", 
      data: "{ 'message':'" + message + "'," 
        + "'options':'" + options + "'," 
        + "'url':'" + $(location).attr('href') + "'," 
        + "'userid':'" + userid + "'," 
        + "'messageid':'" + 0 + "'," 
        + "messagepost:" + JSON.stringify(messagepost) + "," 
        + "'postType':'" + type + "' }", 
      success: function (data) {        

        $('#messages').prepend($(data.d).fadeIn('slow')); 

        growlMessage('Message was successfully'); 
       }, 
      error: function (data) { 
       showError(data.responseText); 
      } 
     }); 
    } 

Web服务从铬

[WebMethod] 
public string SaveMessage(string message, string options, string url, string userid, string messageid, List<MessagePost> messagepost, string postType) { 
} 

请求

{ 'message':'empty leg','options':'Public,','url':'http://localhost/portal/quote.aspx?qid=254','userid':'d2703dd0-c743-4995-ac93-5cfab7fa5205','messageid':'0',messagepost:[{"Types":"","Categories":"","ShowTail":true,"ShowType":true,"SendToNBAA":true,"DirectoryAircraft":false,"ShowCategory":true,"Price":"2500","NBAAEmail":"[email protected]","MessageItinerary":[{"Time":"","Arrival":"KSAN","Departure":"ENNA","ArrivalDate":"12/21/2012","DepartureDate":"12/21/2012"}]}],'postType':'4' } 

消息帖类

public class MessagePost 
{   
    Boolean ShowTail { get; set; } 
    Boolean ShowType { get; set; } 
    Boolean SendToNBAA { get; set; } 
    Boolean ShowCategory { get; set; } 
    Boolean DirectoryAircraft { get; set; } 

    string Types { get; set; } 
    string Price { get; set; } 
    string NBAAEmail { get; set; }   
    string AircraftID { get; set; } 
    string Categories { get; set; } 

    List<MessageItinerary> ItineraryList { get; set; } 
} 

public class MessageItinerary 
{ 
    string Time { get; set; } 
    string Arrival { get; set; } 
    string Departure { get; set; } 
    string ArrivalDate { get; set; } 
    string DepartureDate { get; set; } 
    string Preference { get; set; } 
} 
+0

如果您发布的MessagePost类的服务器端代码(和它里面的任何自定义类),它可以帮助。 –

+0

这将工作与JSON?我想.aspx WebMethod只接受SOAP。你可以尝试发布为application/x-www-form-urlencoded并使用标准的Page_Load()来处理这个或切换到MVC? – saarp

+0

@EugeneOsovetsky我发布了上面的服务器端代码。是的,我发布一个字符串时Web服务工作,我试图将数组发布到我的Web方法时,才开始遇到这个问题。 – chadn

回答

2

就像评论中提到的saarps一样,我也相信这与JSON和数据的反序列化有关。

我在的WebMethods放弃PARAMATERS早,从请求,而不是检索数据。 例如,下面的代码:

[WebMethod] 
public string SaveMessage(string message) { 
    //Do something 
} 

反而会被写成这样:

[WebMethod] 
public string SaveMessage() { 
    string message = HttpContext.Current.Request.Form["message"]; 
    //Do something 
} 
+0

传递数组时,此答案不起作用。 – chadn