微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用.aspx页面作为Ajax事件处理程序?

如何解决使用.aspx页面作为Ajax事件处理程序?

| 几天来,我一直在使用JavaScript,ASP控件和常规控件的不同组合来处理Ajax调用。我对正在发生的事情有一些了解,但是使用ASP控件仍然隐藏了太多的机制,我想更深入地了解。出于这个目的,谁能告诉我为什么以下设置不太起作用? 我有一个带有以下内容文件“ Testy.aspx”:
<asp:Content>
  <script type=\"text/javascript\">
  // a standard home-grown Ajax javascript method
  function ajaxfunction() {
    var ajaxObj = getAjaxObj(); // does the usual browser-detection
    if (ajaxObj) {
      ajaxObj.open(\"GET\",\"Testy.aspx\",true);
      ajaxObj.setRequestHeader(\"IsAjaxRequest\",\"true\");
      ajaxObj.send();
      ajaxObj.onreadystatechange = function() {
        if (ajaxObj.readyState == 4) {
          document.getElementById(\"testytext\").appendChild(document.createTextNode(ajaxObj.responseText));
        }
      }
    }
  }
  </script>

  ... other unrelated html,ASP controls,etc...

  <input id=\"testybutton\" type=\"button\" value=\"baroo\" onclick=\"ajaxfunction()\" />
  <div id=\"testytext\"></div>

</asp:Content>
同时,我具有以下代码隐藏函数“ Testy.aspx.vb”:
Partial Public Class Testy
  Inherits System.Web.UI.Page
  Implements System.Web.IHttpHandler

  ...code for an ordinary (non-Ajax) request is in the middle here...

  \' Now I have code for Ajax requests
  Overrides Sub ProcessRequest(ByVal context As HttpContext)
    If context.Request.Headers(\"IsAjaxRequest\") = \"true\" Then
      context.Response.ContentType = \"text/plain\"
      context.Response.Write(\"Hello World!\")
    Else
      MyBase.ProcessRequest(context)
    End If
  End Sub

  Overloads ReadOnly Property IsReusable() As Boolean
    Get
      Return False
    End Get
  End Property
End Class
因此,我希望使.aspx文件兼具常规页面请求处理程序和Ajax请求处理程序的双重职责。但是,当我单击按钮(\“ baroo \”)来生成Ajax请求时,最终写回到\“ testytext \” div的结果是整个页面的原始html,就像在正常请求条件下一样。显然,我通过使代码隐藏的实现IHttpHandler并提供\“ Overrides Sub ProcessRequest \”方法来覆盖页面请求的尝试不起作用。服务器仍将Ajax请求视为普通请求,实际上甚至从未调用过我自己的\“ ProcessRequest \”方法。 是否可以构建这样的页面/处理程序?如何截获来自客户端的传入请求并做出相应响应?这就是Ajax的工作方式,对吗?所以这一定有可能。 再次,我故意这样做是为了避免使用UpdatePanels之类的“魔术” ASP控件,因此请不要建议使用它们。     

解决方法

设置一个不同的文件作为您的通用处理程序,不要将两者结合在一起。 通用处理程序(.ashx)和常规Web窗体(.aspx)的不同之处在于,通用处理程序不会运行所有正常的win窗体页面处理,而是会简化很多事情。一般来说,在这种情况下,您不需要完整的页面模型,因此它们应为不同文件的原因。 如果您确实希望在主页中通过ajax调用这些方法,请查看\“ WebMethod \”属性。但是,我不会走这条路线。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。