json объект и веб-метод Неверный вызов веб-службы, отсутствующий параметр значения

У меня есть пользовательский интерфейс с сортировкой Jquery. У меня есть веб-службы для обновления порядка напоминаний, когда пользователь обновляет заказы напоминания. Я знаю, что это проблема с передачей данных json в веб-службы, но не могу ее решить.

Ошибка:
Недопустимый параметр для вызова веб-служб: rlist в System.Web.Script.Services.WebServiceMethodData.CallMethod(целевой объект, параметры IDictionary2 parameters) at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary2) в System.Web.Script.Services.RestHandler.InvokeMethod(контекст HttpContext, WebServiceMethodData methodData, IDictionary`2 rawParams) в System.Web.Script.Services.RestHandler.ExecuteWebServiceCall (контекст HttpContext, WebServiceMethodData methodData)

 Web Services 
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    using Compudata_ProjectManager.CodeFile.BOL;
    using System.Data.SqlClient;
    using System.Web.Script.Services;

    namespace Compudata_ProjectManager.WebServices
    {
        /// <summary>
        /// Summary description for remindersWebService
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
         [ScriptService]
        // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
        // [System.Web.Script.Services.ScriptService]
        public class remindersWebService : System.Web.Services.WebService
        {


            public class ReminderDTO
            {
                public int Id { get; set; }
                public int Order { get; set; }
            }

            [WebMethod]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
            public string UpdateOrder(List<ReminderDTO> rList)
            {
                //CompuData_ProjectManagerConfiguration.DbconnctionString;

                using (SqlConnection connectionString = new SqlConnection(CompuData_ProjectManagerConfiguration.DbconnctionString))
                {

                    foreach (var r in rList)
                    {
                        string sSQL = "UPDATE [TaskManagementSystem_DB].[dbo].[Reminders] SET [reminderOrder] = " +  r.Order.ToString() + "where reminderID = " + r.Id;

                        SqlCommand cmd = new SqlCommand(sSQL, connectionString);

                        try
                        {
                            cmd.ExecuteNonQuery();
                        }
                        catch (SqlException)
                        {
                            return "falied";
                        }


                    }
                    return "save";
                }
            }
        }
    }

javascript 

    $(function () {
        $("#sortable").sortable({
            placeholder: "vacant",
            update: function (e, ui) {
                //process each li

                //create vars
                var orderArray = [];
                var wrap = {};
                $("#sortable li").each(function () {


                    //build ReminderObject
                    var reminderObject = {
                        Id: $(this).attr("id"),
                        Order: $(this).find("input[type='hidden']").val()
                    };

                    //add object to array 
                    orderArray.push(reminderObject);

                });

                wrap.d = orderArray


                //pass to server 
                $.ajax({
                    type: "POST",
                    url: "../WebServices/remindersWebService.asmx/UpdateOrder",
                    data: JSON.stringify(wrap),
                    processData: false,
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        if (data.d === "saved") {
                            document.write("Save ok");
                        } else {
                            document.write("Save failed");
                        }
                    },
                    error: function (xhr, status, error) {
                        var err = eval("(" + xhr.responseText + ")");
                        console.log(err.StackTrace);
                        alert(err.Message);
                    }
                });

            } //end of update function 
        });
        $("#sortable").disableSelection();



        $("input[type=checkbox]").on("click", function () {
            $(this).nextAll().toggleClass("hidden");
        });

    });

</script>

person Community    schedule 04.03.2013    source источник


Ответы (1)


Попробуйте отправить Id и Order как целые числа, как и ожидалось.

var reminderObject = {
    Id: parseInt($(this).attr("id"), 10),
    Order: parseInt($(this).find("input[type='hidden']").val(), 10)
};

Также измените wrap.d = orderArray на wrap.rList = orderArray, так как rList является ожидаемым параметром.

person Musa    schedule 04.03.2013
comment
@a_Elnajjar попробуйте изменить wrap.d = orderArray на wrap.rList = orderArray - person Musa; 04.03.2013