从jQuery调用将参数传递给Http Handler

时间:2011-07-26 09:39:57

标签: jquery asp.net

我试图调用我的自定义Htpp Handler并希望传递一些参数但我无法在http Handler进程请求方法中检索这些param的值。 我使用像..的代码。

在客户端

$.ajax({
                url: 'VideoViewValidation.ashx',
                type: 'POST',
                data: { 'Id': '10000', 'Type': 'Employee' },
                contentType: 'application/json;charset=utf-8',
                success: function (data) {
                    debugger;
                    alert('Server Method is called successfully.' + data.d);
                },
                error: function (errorText) {
                    debugger;
                    alert('Server Method is not called due to ' + errorText);
                }
            });

这是我的自定义http Handler

public class VideoViewValidation : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string videoID = string.Empty;
        string id = context.Request["Id"];
        string type = context.Request["Type"];
}
}

请告诉我问题出在哪里。

4 个答案:

答案 0 :(得分:6)

删除“contentType:'application / json; charset = utf-8'”并添加“dataType:'json'”

答案 1 :(得分:4)

达姆的回答是正确的,但只是为了更清楚地解释为什么这样做......

您需要删除行contentType: 'application/json;charset=utf-8',以便$ .ajax()使用默认值contentType: 'application/x-www-form-urlencoded; charset=UTF-8'(在docs for $.ajax中指定)。通过单独执行此操作,您的代码示例应该可以正常工作(dataType参数实际上指定了您希望从服务器返回的数据类型)。

以最简单的形式,您可以像这样编写$ .ajax()调用:

$.ajax({
    url: 'VideoViewValidation.ashx',
    data: { 'Id': '10000', 'Type': 'Employee' },
});

在这种情况下,请求将通过GET进行,参数将通过查询字符串发送,但它仍然适用于context.Request

答案 2 :(得分:0)

您的jquery正在发送POST数据,因此您需要查看Request.Form [“Id”]等

public class VideoViewValidation : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string videoID = string.Empty;
        string id = context.Request.Form["Id"];
        string type = context.Request.Form["Type"];
}
}

答案 3 :(得分:0)

您的数据使用ajax调用发送到处理程序(而不是来自典型的表单提交)。要检索数据,您只需要context.Request [“Id”]。这应该够了吧。