C# Ajax 在前台调用报出未定义错误

最近刚开始学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#,希望与大家多多交流与学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值