如何从Jquery Ajax调用Default.aspx.cs页面方法?

时间:2012-01-10 15:07:07

标签: asp.net jquery c#-3.0

我有一个注册表单(Default.aspx),当用户点击按钮时,它最初显示只有2个字段和一个按钮(名称,电子邮件)Jquery对Default.aspx.cs函数进行Ajax调用,查询db以检查用户,如果它返回no,那么表单会扩展自己添加注册字段。

我无法调用Defualt.aspx.cs 我的Default.aspx代码是:

  <script type="text/javascript">
        $(document).ready(function() {
            $('#btnDownload').click(function() {
                //$('#secondary').toggle(1000)
                $.ajax({
                    type: "POST",
                    url: "Default.aspx/PassData",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: AjaxSucceeded,
                    error: AjaxFailed
                });
            });
            function AjaxSucceeded(result) {
                alert(result.d);
            }
            function AjaxFailed(result) {
                alert('Failed');
            } 
        });

    </script>

Default.aspx.cs是(用于测试目的):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    private static string PassData(string id)
    {
        return "Pass";
    }
}

但每次运行代码时,JS都会返回错误:

Uncaught ReferenceError: com is not defined
POST http://localhost:2305/temp/Default.aspx/PassData 500 (Internal Server Error) 

我检查了几个帖子,但没有一个帖子得到解答/解决。

任何形式的帮助都将受到高度赞赏。

提前致谢

2 个答案:

答案 0 :(得分:3)

您需要使用[WebMethod]属性修饰方法。

修改

您需要添加ScriptManager并使用一些ASP.NET ajax框架方法。我认为使用开箱即用的功能是不可能的。

一个选项是创建一个处理这些方法的HttpHandler。如果请求是POST,你可以从url中找到页面类型(框架中有一个方法,但我不记得哪一个,你需要调查),创建一个新实例并检查方法是否有WebMethod(或您喜欢的其他属性)。如果是,您可以使用反射调用它并渲染结果。

修改

@Antony Highsky指出,这是可能的。我认为解决方案是添加[WebMethod]属性并使de方法公开(在示例中它是私有的)。

答案 1 :(得分:0)

使用** [WebMethod]

[WebMethod]
private static string PassData(string id)
{
    return "Pass";
}