2010-09-01 43 views
0

我仍然無法得到這個工作。我嘗試過使用字符串數組對象數組字典。我可能會錯誤地格式化我的JSON,但是我使用的是labs_JSON插件。如果我刪除我的數據並測試它正確調用的Web服務。本:我的代碼如下:JSON數據無法與Web服務簽名匹配

HTML:

<div style="display: block; float: left;"> 
     <asp:Repeater ID="rptMenuRecipeCategories" runat="server"> 
      <HeaderTemplate> 
       <div class="recipeChecklistHeader">Menu Recipe Categories</div> 
       <ul id="menuRecipeCategories" class="connectedSortable"> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <li id="item_<%# Container.ItemIndex + 1 %>" recipeCategoryId='<%# Eval("RecipeCategoryID") %>' > 
        <%# Eval("RecipeCategory") %> 
       </li> 
      </ItemTemplate> 
      <FooterTemplate> 
       </ul> 
      </FooterTemplate> 
     </asp:Repeater> 
</div> 
<div style="display: block; float: left"> 
     <asp:Repeater ID="rptAvailableMenuRecipeCategories" runat="server"> 
      <HeaderTemplate> 
       <div class="recipeChecklistHeader">Available Menu Recipes</div> 
       <ul id="availabeMenuRecipeCategories" class="connectedSortable"> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <li id="item_<%# Container.ItemIndex + 1 %>" recipeCategoryId='<%# Eval("RecipeCategoryID") %>'> 
        <%# Eval("RecipeCategory") %> 
       </li> 
      </ItemTemplate> 
      <FooterTemplate> 
       </ul> 
      </FooterTemplate> 
     </asp:Repeater> 
</div> 

JS:

$(function() { 
     $("#menuRecipeCategories, #availabeMenuRecipeCategories").sortable({ 
      connectWith: '.connectedSortable', 
      update: function (ev, ui) { 
       //var result = $('#menuRecipeCategories').sortable('toArray'); 
       //updateSequenceNumber(result); 
      } 
     }).disableSelection(); 
    }); 

//這是目前通過一個按鈕單擊事件引發 功能persistRecipeCategoriesToJSON(){VAR 項目= $('#menuRecipeCategories')。sortable('toArray'); var dictionaryData =''; var index = 0; var itemArray = new Array();

 for (i = 0; i <= items.length - 1; i++) { 
      if (items[i].length == 0) 
       continue; 

      var item = $('#' + items[i])[0]; 
      var recipeCategoryId = item.attributes["recipeCategoryId"].nodeValue; 
      itemArray[i] = recipeCategoryId; 
     } 

     persistPositionUsingAjax($.json.encode(itemArray)); 
    } 

    $(document).ready(function() { 
     $.ajaxSetup({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json" 
     }); 
    }); 

    function persistPositionUsingAjax(jsonData) { 
     var webServiceURL = '<%=ResolveUrl("~/UserControls/MenuRecipeChecklistService.asmx")%>' + '/UpdateMenuRecipeChecklist'; 
     $.ajax({ 
      // This is page.name/MethodName  
      url: webServiceURL, 

      // This is the data (method arguments) 
      data: jsonData, 

      // This is the handler for success.  
      success: function (msg) { 
       alert('success'); 
      } 
     }); 
    } 

JSON:

["1","2"] 

的Webservice:

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string UpdateMenuRecipeChecklist(*INPUT TYPE TO GO HERE*) 
     { 
      return ""; 
     } 

****玉傢伙。我解決了這個問題。看起來JSON實驗室插件格式不正確。 我加入這一行我persistRecipeCategoriesToJSON功能:**

var args = { jsonData: itemArray }; 
persistPositionUsingAjax($.json.encode(args)); 

的JSON然後由對象指定一個名稱格式正確無誤。 我再更新我的web服務的方法簽名:

public string UpdateMenuRecipeChecklist(string[] jsonData) 

,然後一切正常:)。感謝所有嘗試提供幫助的人!

回答

0

這個問題現在已經得到解決。我已經修改了原始文章以在底部包含解決方案。

+0

*好的傢伙。我解決了這個問題。看起來JSON實驗室插件格式不正確。我將這一行添加到我的persistRecipeCategoriesToJSON函數中: var args = {jsonData:itemArray}; persistPositionUsingAjax($。json.encode(args)); 然後通過爲對象分配名稱來正確格式化JSON。然後,我更新我的web服務的方法簽名: 公共字符串UpdateMenuRecipeChecklist(字符串[] jsonData) 和一切然後工作:)。感謝所有嘗試提供幫助的人! – Elixir 2010-09-02 07:10:08

0

試試這個爲Web方法簽名:

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string UpdateMenuRecipeChecklist(List<string>) 
{ 
    return ""; 
} 

編輯:已經修改有參數爲string一個List現在,而不是stringIEnumerable

此外,爲什麼你不嘗試傳遞對象本身,而不是編碼的字符串。

像:

persistPositionUsingAjax(itemArray) 
+0

嗨對不起,這沒有奏效。看起來Web服務沒有被該簽名調用(當然爲方法簽名分配一個變量名)。但是,如果我刪除我的數據並刪除該方法,服務會正確調用。我似乎無法接受我的JSON數據通過它。這可能是json數據編碼不正確。不過,我仍在研究這一點。感謝您的輸入。 – Elixir 2010-09-02 06:14:31

+0

只是要添加,但。 System.IEnumerable不可序列化。這意味着它不能用於WebMethods。 – Elixir 2010-09-02 06:18:18

+0

你可以嘗試我在答案中所做的修改,這可能會有所幫助... – 2010-09-02 06:31:58