首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.aspx页面作为Ajax事件处理程序?

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

Stack Overflow用户
提问于 2011-04-14 06:33:48
回答 1查看 712关注 0票数 0

几天来,我一直在使用javascript、ASP控件和常规控件的不同组合来处理Ajax调用。我已经对所发生的事情有了一些了解,但是使用ASP控件仍然隐藏了太多的机械,我想有一个更深入的了解。有了这个目标,谁能告诉我为什么下面的设置不是很有效?

我有一个包含以下内容的文件"Testy.aspx“:

代码语言:javascript
复制
<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“,它包含以下内容:

代码语言:javascript
复制
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控件,所以请不要建议使用它们。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-14 06:42:12

设置一个不同的文件作为您的通用处理程序,并且不要将这两个文件组合在一起。

通用处理程序(.ashx)和常规web表单(.aspx)的不同之处在于,通用处理程序并不运行所有常规的win表单页面处理,而是将事情简化了很多。一般来说,你不希望在这种情况下使用完整的页面模型,因此它们应该是不同的文件。

如果您确实希望在页面中包含通过ajax调用的方法,那么可以查看"WebMethod“属性。然而,我不会走这条路。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5656474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档