我尝试使用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>
答案 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)