如何解决使用.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 举报,一经查实,本站将立刻删除。