【问题标题】:JSON Data cannot be matched to web service signatureJSON 数据无法与 Web 服务签名匹配
【发布时间】:2010-09-02 14:31:11
【问题描述】:

我似乎仍然无法让它工作。我尝试过字符串数组对象数组字典。我的 JSON 格式可能不正确,但我使用的是 labs_JSON 插件。如果我删除我的数据并测试它正确调用的网络服务。 :我的代码如下所示:

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

//这是目前通过按钮点击事件引发的 功能坚持食谱类别ToJSON(){ var items = $('#menuRecipeCategories').sortable('toArray'); 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"]

网络服务:

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

****好吧,伙计们。我已经解决了这个问题。使用 Json labs 插件似乎 JSON 格式不正确。 我将此行添加到我的 persistRecipeCategoriesToJSON 函数中:**

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

然后通过为对象分配名称来正确格式化 JSON。 然后我将我的网络服务的方法签名更新为:

public string UpdateMenuRecipeChecklist(string[] jsonData)

然后一切正常:)。感谢所有试图提供帮助的人!

【问题讨论】:

    标签: asp.net jquery json service


    【解决方案1】:

    这个问题现在已经解决了。我已经修改了原始文章以在底部包含解决方案。

    【讨论】:

    • *好的,伙计们。我已经解决了这个问题。使用 Json labs 插件似乎 JSON 格式不正确。我将此行添加到我的 persistRecipeCategoriesToJSON 函数中: var args = { jsonData: itemArray }; persistPositionUsingAjax($.json.encode(args));然后通过为对象分配名称来正确格式化 JSON。然后我将我的网络服务的方法签名更新为: public string UpdateMenuRecipeChecklist(string[] jsonData) 然后一切正常:)。感谢所有试图提供帮助的人!
    【解决方案2】:

    试试这个作为你的网络方法签名:

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

    编辑:已修改为现在将参数作为stringList,而不是stringIEnumerable

    另外你为什么不尝试传递对象本身而不是编码字符串。

    喜欢:

    persistPositionUsingAjax(itemArray)
    

    【讨论】:

    • 您好,抱歉,这不起作用。似乎没有使用该签名调用 Web 服务(当然为方法签名分配了一个变量名)。但是,如果我删除我的数据并删除该服务确实被正确调用的方法。我似乎无法让它接受传递给它的 JSON 数据。可能是 json 数据编码不正确。但是我仍在调查这个。不过感谢您的意见。
    • 只是添加一些东西。 System.IEnumerable 不可序列化。这意味着它不能在 WebMethods 中使用。
    • 谢谢弗洛伊德。如果你看我已经编辑了它,我已经解决了这个问题。不过,我感谢您的所有意见。即使不是解决方案,我有什么办法可以标记你吗:)?
    • 很高兴它已解决...如果这在某种程度上有帮助,您可以投票赞成我的答案。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多