【问题标题】:how to use jquery to send a parameter array to an asp.net web method如何使用jquery将参数数组发送到asp.net web方法
【发布时间】:2011-09-16 15:00:22
【问题描述】:

使用下面的 jquery,我正在尝试将数组参数列表提交到下面的相应 Web 方法。我在这里错过了什么?

 <script type="text/javascript">
        $(document).ready(function () {

            var slider = $('.slider').slider({
                range: "min",
                min: 0,
                max: 100,
                change: function (e, ui) {

                    var paramList = new Array();

                    var values = $('.slider').each(function () {
                        var s = $(this);
                        var aType = s.attr('itemName');
                        var point = s.slider("option", "value");
                        paramList.push(aType);
                        paramList.push(point);


                    });

                    CallPageMethod("SliderChanged", paramList, success, fail);
                    //                    $("#img1").fadeOut();
                    //                    alert("done");
                },
                slide: function (e, ui) {
                    var point = ui.value;
                    $("#selected_value").html(point);
                    //                    var width = 100 - point;
                    //                   $("#range").css({ "width": point + "%" });
                }

            });

            function CallPageMethod(methodName, paramArray, onSuccess, onFail) {

                //create list of parameters in the form
                //{"paramName1":"paramValue1","paramName2":"paramValue2"}

                var paramList = '';
                if (paramArray.length > 0) {
                    for (var i = 0; i < paramArray.length; i += 2) {
                        if (paramList.length > 0) paramList += ",";
                        paramList += '"' + paramArray[i] + '":"' + paramArray[i + 1] + '"';
                    }
                }
                paramList = '{' + paramList + '}';


                //get the current location
                var loc = window.location.href;
                loc = (loc.substr(loc.length - 1, 1) == "/") ? loc + "default.aspx" : loc;

                //call the page method
                $.ajax({
                    type: "POST",
                    url: loc + "/" + methodName,
                    data: paramList,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: onSuccess,
                    fail: onFail

                });

            }


            function success(response) {

                var lbl = $('#<%= Label1.ClientID %>')
                lbl.html("Your report is now ready for download.");
                alert(response.d);

            }

            function fail(response) {
                alert("An error occurred.");
            }

        });


   </script>

我有以下网络方法:

  [WebMethod]
    public static string SliderChanged(string[] values)
    {

        return "successArray";


    }

【问题讨论】:

  • 我不认为你可以在不指定消息名称的情况下使用 webmethods 进行函数重载。你能解释一下你正在变得更好的错误,所以人们不必为此制定测试解决方案吗?来源:msdn.microsoft.com/en-us/library/…
  • 我同意,据我所知,最后我检查过,您不能重载 Web 方法名称,因为它们生成为无法按参数类型区分重载的肥皂请求一个人。
  • 好的 - 我只有一种方法(不再是重载)。我在visual studio中设置了断点,webmethod和success或fail方法都没有命中。

标签: jquery asp.net ajax webmethod


【解决方案1】:

正如其他人所说,需要指定参数名称;因此,

data: paramList,

应该是:

data: '{ "values":'+paramList+'}',

【讨论】:

    【解决方案2】:

    一些观察:

    1. 您的 Web 服务通常以 .asmx 文件的形式提供。
      因此,在您的 ajax 调用中,您要提供它的位置,而不是 .aspx-page。
      例如。 url: "/WebService.asmx/" + methodName,

    2. 确保可以从 Javascript 访问您的网络服务。
      为此装饰班级:
      [System.Web.Script.Services.ScriptService]
      public class WebService : System.Web.Services.WebService {

    【讨论】:

    • 虽然这不是我的问题,但这会对某人有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2012-10-25
    • 2014-03-30
    • 2011-09-26
    相关资源
    最近更新 更多