Мне все еще не удается заставить это работать. Я пробовал словари массивов строковых массивов. Возможно, я неправильно форматировал JSON, но я использую плагин labs_JSON. Если я удаляю свои данные и проверяю веб-сервис, он звонит правильно. The: Мой код выглядит следующим образом:
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();
});
// Это в настоящее время поднимается через событие нажатия кнопки
function persistRecipeCategoriesToJSON () {
var items = $ ('# menuRecipeCategories'). sortable ('toArray');
var dictionaryData = '';
индекс var = 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 неправильно форматируется с помощью плагина Json labs.
Я добавил эту строку в мою функцию persistRecipeCategoriesToJSON: **
var args = { jsonData: itemArray };
persistPositionUsingAjax($.json.encode(args));
Затем JSON правильно форматируется путем присвоения имени объекту.
Затем я обновляю сигнатуру метода моего веб-сервиса:
public string UpdateMenuRecipeChecklist(string[] jsonData)
и все потом работает :). Спасибо всем, кто пытался помочь!