【问题标题】:How to send integer value of textbox to [WebMethod] using ajax jQuery如何使用ajax jQuery将文本框的整数值发送到[WebMethod]
【发布时间】:2017-06-20 14:44:15
【问题描述】:
[code page="c#"]
[WebMethod]
public static int bubblesort(int[] arr)
{       
   //some code here

    return arr;
}

var text;

$(document).ready(function() {
    $("#submit").on("click", function() {
        text = $("#text1").val();
        option = $('#dropdownfilter').val();

            bsortedarr(text);
        
    });
});

function bsortedarr(text) {
    $.ajax({
        type: "POST",
        url: "default.aspx/bubblesort",
        data: JSON.stringify({ arr: text }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
          //code
        },
        error: function(response) {
           //code
        }
    });
}

我创建了 WebMethod,它使用冒泡排序返回排序后的数组列表。当我选择选项 bsort 并将整数作为输入(例如 100,10,1)输入文本框时。所以我通过使用stringify({ arr: text}) 将该文本框值传递给ajax 调用。我想将这个文本值“100,10,1”传递给 WebMethod,但它没有发生。所以我试图用 ',' 分割它,并想返回数组格式列表,但它是整数类型,所以无法返回。

【问题讨论】:

  • data: JSON.stringify([1, 2, 3]), 您需要发布一个数组,因为您接受 List<>JSON.stringify() 可能不需要在这里
  • 我通过使用 stringify({ arr: text}) 将该文本框值传递给 ajax 调用我想将这个文本值“100,10,1”传递给 webmethod,但它没有发生。所以我试图拆分这个','并希望返回数组格式字符串。
  • data: JSON.stringify(text.split(',')),
  • 感谢@Satpal,但在 webmthod 中我将类型更改为字符串,我无法返回
  • 返回数组时出错,因为我使用类型为 int 并将数组传递为 int.so 如何以字符串格式返回数组任何想法

标签: javascript c# jquery ajax webmethod


【解决方案1】:

您应该首先定义atxt 变量。它将保存文本框的值,代码将是这样的:

var atxt = $('TEXTBOX_SELECTOR').val();

之后使用这个变量通过 ajax 传递值。

【讨论】:

    【解决方案2】:

    版本 1
    WebMethod 的变化:

    • 如果要返回数组,将返回类型改为object
    • 拆分 text 然后将数组转换为 int 列表
    • 如果要对 List 进行排序,只需使用 Sort() 而不是循环

    WebMethod 更新:

    [WebMethod]
    public static object bubblesort(string arr)
    {
        // Split then convert to List<int>
        var sra = arr.Split(',').Select(int.Parse).ToList();
        // Sort the List
        sra.Sort();
    
        return sra;
    }
    


    第 2 版
    如果您将 WebMethod 参数类型更改为 int[],只需对数组进行排序:
    [WebMethod]
    public static object bubblesort(int[] arr)
    {
        // ----------------------------------------
        // --- Return a Lit of int
        // ----------------------------------------
        // var sra = arr.ToList();
        // sra.Sort();
        // return sra;      
    
        // ----------------------------------------
        // --- Return a List of string
        // ----------------------------------------
        // return sra.Select(i => i.ToString()).ToList();
    
        // ----------------------------------------
        // --- Return a string containing all numbers sorted
        var sra = arr.ToList();
        sra.Sort();
        return String.Join("", sra.Select(i => i.ToString()));
    }
    

    测试输入是否是用逗号分隔的数字列表:

    text = $("#text1").val();
    var pattern = new RegExp(/^[0-9]+(,[0-9]+)*$/);
    var isNumbers = pattern.test(text.replace(/\s+/g, ''));
    

    然后拆分你的text

    data: JSON.stringify({ arr: text.split(',') })
    

    【讨论】:

    • 但是使用 split into webmethod 会给出 system.array 不包含 split split 的定义的错误
    • 是因为您将 WebMethod 参数类型更改为 int[] 吗?如果它是一个字符串类型并且你的 ajax 数据仍然是JSON.stringify({arr: text}),那么它正在工作。
    • 如果要返回字符串列表而不是 int 列表,请使用 return sra.Select(i =&gt; i.ToString()).ToList();
    • 我在结果中得到排序数组,但想要以 [1,4,67,666] 这样的格式。想要以这种格式显示警报,但我以这种格式进入 1267666。所以我应该使用[webmethod] 端的字符串连接以获得这种格式的结果
    • 请看我的更新:return String.Join("", sra.Select(i =&gt; i.ToString()));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2015-07-25
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多