Данные JSON не могут быть сопоставлены с подписью веб-службы - PullRequest
0 голосов
/ 01 сентября 2010

Мне все еще не удается заставить это работать. Я пробовал словари массивов строковых массивов. Возможно, я неправильно форматировал 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)

и все потом работает :). Спасибо всем, кто пытался помочь!

Ответы [ 2 ]

0 голосов
/ 02 сентября 2010

Этот вопрос теперь решен. Я изменил оригинальную статью, чтобы она содержала решение внизу.

0 голосов
/ 01 сентября 2010

Попробуйте это для своей подписи веб-метода:

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

РЕДАКТИРОВАТЬ: изменили, чтобы параметр теперь был List из string вместо IEnumerable из string.

Кроме того, почему бы вам не попробовать передать сам объект, а не закодированную строку.

Как:

persistPositionUsingAjax(itemArray)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...