我有一个注册表单(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)
我检查了几个帖子,但没有一个帖子得到解答/解决。
任何形式的帮助都将受到高度赞赏。
提前致谢
答案 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";
}