将参数从jQuery ajax调用传递给Web表单中的C#方法

时间:2015-08-20 20:20:25

标签: c# jquery ajax webforms

我想把我从标记中的数据属性中提取的值传递给使用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
}

2 个答案:

答案 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",