使用C#Params接收多个AJAX JSON数据

时间:2018-01-12 08:03:45

标签: c# jquery ajax

我尝试使用C# params创建一个处理从AJAX调用接收的多个参数的函数。但服务器抛出internal server error 500。这是场景的样子:

平均函数可以传递尽可能多的参数,至少两个到多达20个(不考虑此时的性能)。

首先,这是我的工作代码,它将参数作为逗号分隔的字符串传递,该字符串由服务器接收并成功处理

function mean(textboxA, textboxB, textboxC) {
        var textboxC = textboxC.id;
        event.preventDefault();

        $.ajax({
            type: "POST",
            url: "Default.aspx/calculateMean",
            data: '{ strTextBoxes:"' + textboxA.value + ',' + textboxB.value + '"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                event.preventDefault();
                document.getElementById(textboxC).value = data.d;
            }
        });
    }

在服务器端,C#代码位于Default.aspx,如下所示:

<script runat="server">

    [System.Web.Services.WebMethod]
    public static string calculateMean(string strTextBoxes)
    {

        List<string> listTextBoxes = new List<string>();
        foreach (string temp in strTextBoxes.Split(','))
        {
            listTextBoxes.Add(temp);
        }

        string strA = listTextBoxes.ElementAt(0).ToString();
        string strB = listTextBoxes.ElementAt(1).ToString();
        if (String.IsNullOrEmpty(strA))
        {
            strA = "0";
        }

        if (String.IsNullOrEmpty(strB))
        {
            strB = "0";
        }
        float floatA = Convert.ToInt32(strA);
        float floatB = Convert.ToInt32(strB);

        string mean = Convert.ToString(ClassLibrary1.Common.mean(floatA,floatB));
        return mean;
    }
</script>
  

自定义代码后使用C#params技术,jQuery   如下所示:

<script type="text/javascript">
    function mean(textboxA, textboxB, textboxC) {
        var textboxC = textboxC.id;
        event.preventDefault();
        var JSONData = JSON.stringify({ strValues1: textboxA.value, strValues2: textboxB.value });
        console.log(JSONData);
        $.ajax({
            type: "POST",
            url: "Default.aspx/calculateMean",
            data: JSONData,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                event.preventDefault();
                document.getElementById(textboxC).value = data.d;
            }
        });
    }
</script>

和服务器端Default.aspx看起来像:

<script runat="server">

    [System.Web.Services.WebMethod]
    public static string calculateMean(params string[] values)
    {


        string strA = values[0];
        string strB = values[1];
        if (String.IsNullOrEmpty(strA))
        {
            strA = "0";
        }

        if (String.IsNullOrEmpty(strB))
        {
            strB = "0";
        }
        float floatA = Convert.ToInt32(strA);
        float floatB = Convert.ToInt32(strB);

        string mean = Convert.ToString(ClassLibrary1.Common.mean(floatA,floatB));
        return mean;
    }
</script>

运行上述修改后的代码后,会显示internal server error 500 Ajax Internal server error

2 个答案:

答案 0 :(得分:2)

您正在传递JSON对象:

{ "strValues1": "6", "strValues2": "5" }

你期待一个string数组。

在定义后端方法时,必须传递一个字符串数组。 试试这样:

var arrayArguments = [];
arrayArguments.push(textboxA.value);
arrayArguments.push(textboxB.value);
var JSONData = JSON.stringify(arrayArguments);
console.log(JSONData);

答案 1 :(得分:0)

如果你想要保留名字的各种值,你应该使用第一个选项并发送一个JSON对象(在发送之前将其转换为字符串)然后在WebMethod中反序列化它:

var strJsonObj = JSON.stringify({x:'12',y:'45',z:'786'});

C#

[System.Web.Services.WebMethod]
public static string calculateMean(string strJsonObj)

如果你不关心变量名,你可以使用字符串数组:

var strJsonArr = JSON.stringify(['12', '45', '786', '444']);

C#

[System.Web.Services.WebMethod]
public static string calculateMean(params string[] strJsonArr)