我想把我从标记中的数据属性中提取的值传递给使用jQuery Ajax的C#方法。在这个例子中,QuestionNumber的值产生1. EMHQQuestion是一个值为1到15的枚举。我希望我的C#方法DeleteCondition接收1,但我得到500内部服务器错误:“无效的Web服务调用,丢失参数值:'questionNumber'。
有什么建议吗?
function DeleteConditions() {
var QuestionNumber = $('.noRadioButton').data('questionnumber');
$.ajax({
url: "mhqpreinterview.aspx/deletecondition",
type: "POST",
contentType: "application/json; charset=utf-8",
datatype: "json",
questionNumber: QuestionNumber
});
Dialog.dialog('close');
}
...
[WebMethod(EnableSession = true)]
public static void DeleteCondition(EMHQQuestion questionNumber)
{
//stuff
}
答案 0 :(得分:2)
在为网络表单方法制作AJAX要求时,我一直在努力解决这个问题。
对于你的c#方法:
[System.Web.Services.WebMethod()]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string DeleteCondition(EMHQQuestion questionNumber)
{
// do enum stuff here
}
请注意我已将方法类型从void更改为string。将一些可识别的信息发送回客户端是个好主意。即使您不必返回数据,也可以自定义成功或有用的调试信息。
以下是您必须对AJAX对象进行的更改:
var params = '{ questionNumber: ' + JSON.stringify(QuestionNumber) + '}';
var post = {
type: 'POST',
url: 'mhqpreinterview.aspx/deletecondition',
data: params,
contentType: "application/json; charset=utf-8",
dataType: "json"
};
$.ajax(post);
你应该从上面的javascript中删除的是在发送给你的方法之前使用JSON.stringify。您必须确保QuestionNumber已正确参数化,并且已经有效的JSON才能接收Web服务方法。
如果发现它仍无法正常工作,请在尝试发送之前检查QuestionNumber中存储的值。
以上代码与我合作,任何其他问题发表评论,我会尽力帮助回答。
答案 1 :(得分:1)
使用数据jquery ajax field:
data: JSON.stringify({QuestionNumber: QuestionNumber}),
dataType: "json",