最近刚开始学C#,在用Ajax.dll调用AJAX时,报出未定义错误
寻半天无果后对比成功代码
Default.aspx文件如下
<head runat="server">
<title></title>
<script type="text/javascript">
window.onload = function () {
alert(_Default.getString().value);
}
</script>
</head>
<body>
</body>
Default.aspx.cs文件如下
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Ajax.Utility.RegisterTypeForAjax(typeof(_Default));
}
[Ajax.AjaxMethod]
public string getString()
{
return "Hello Ajax";
}
}
Web.config如下
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpHandlers>
<add path="ajax/*.ashx" verb="POST,GET" type="Ajax.PageHandlerFactory,Ajax"/>
</httpHandlers>
</system.web>
</configuration>
此代码报出_Default未定义错误
最后发现自动生成的<form runat="server"></form>被我删除,
在body中重新加入代码,Ajax就可以正常使用了
<body>
<form runat="server">
</form>
</body>
分析原因:
由于初学C#对内部原理不太理解,但报出未定义错误肯定为aspx.cs文件未被解析为HTML代码,导致无法注册_Default为javascript对象,
而前端页面唯一指示与后台交互的仅为runat="server",
我在去除form标签,使用其他标签也有runat属性(如label,input标签),但都报出未定义异常,因此我大胆猜想,<form runat="server"></form>表示将form中的数据传递给对应的aspx.cs文件并返回结果
因此如果需要使用asp:XXX的控件时,也需要放在Form标签中,因此我拖入<asp:button>控件在form外
<body>
<form runat="server">
</form>
<asp:Button ID="Button1" runat="server" Text="Button" />
</body>
则报出如下异常
结论:
C#中自动生成的<form runat="server"></form>是前台页面与后台代码交互的一个重要纽带,
如果删除,那在ASP.NET中书写的代码与平时的txt中写的无差别,无法与后台交互,自带的插件也无法使用,
注:由于注册_Default是在Page_Load中进行的,因此必须在页面加载完成后前台页面才拥有_Default对象
如果把_Default对象放在window.onload方法之外,那也会报出未定义异常
<script type="text/javascript">
alert(_Default.getString().value);
window.onload = function () {
}
</script>
小弟刚刚开始学C#,希望与大家多多交流与学习