__doPostBack() 是不是有可能发送 GET 请求?
Posted
技术标签:
【中文标题】__doPostBack() 是不是有可能发送 GET 请求?【英文标题】:Is it possible that __doPostBack() would ever send a GET request?__doPostBack() 是否有可能发送 GET 请求? 【发布时间】:2011-01-28 06:01:05 【问题描述】:我在使用 Telerik RadGrid 时遇到问题,我想启用多行选择。只要选择或取消选择行,我也想转到服务器。我创建了一个 javascript 函数来处理 Grid 的客户端事件(OnRowSelected 和 OnRowDeSelected)。函数如下所示:
function onOperationRowSelected(sender, eventArgs)
__doPostBack("<%=myControl.ClientID %>", "rowSelected:" + eventArgs.get_itemIndexHierarchical());
另一个函数非常相似,唯一的区别是它发送字符串“rowDeselected”而不是“rowSelected”。
在 Page_Load 上,我使用“IsPostBack”检查请求是否是 Post 请求,如果是,我检查它是 rowSelected 还是 rowdeselected。
我的问题是,当我在网格上选择第一个 raw 时,会发生 Post 请求(这是预期的),但是,当我选择第二行时,会发出 GET 请求,这(显然)会导致 IsPostBack 返回错误的。
我在这里缺少什么?
编辑: 我刚刚检查了 Request 对象,发现 HttpMethod 属性值为“POST”。为什么是 HTTP POST 请求,IsPostBack 返回 false??
【问题讨论】:
【参考方案1】:该函数尊重<form>
的操作。以下是 __doPostBack 的作用:
function __doPostBack(eventTarget, eventArgument)
if (!theForm.onsubmit || (theForm.onsubmit() != false))
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
所以它会执行表单设置的任何操作,通常只是在 asp.net 中发布。
那么有可能吗?是的,当然,我不确定为什么会发生这种情况。
【讨论】:
【参考方案2】:在没有看到网格生成的标记的情况下,我假设它使用带有 javascript 应用点击处理程序的链接来执行回发。因此,我认为最可能的罪魁祸首是阻止处理程序触发的 javascript 错误,它为您提供了应用处理程序的锚点的默认行为,在本例中为 GET。我能给你的最好建议是在 Firefox/Firebug 中查看它,看看控制台中是否显示任何错误。
也就是说,您可能希望构建应用程序,以便在禁用 javascript 时它可以正常工作,并纠正错误并弄清楚如果您最终收到 GET 请求时如何响应。
【讨论】:
你可能想看看这个论坛帖子:forums.asp.net/p/1079528/3172367.aspx。当第一个事件触发时,您是否可能正在加载具有空 url 的链接?【参考方案3】:您确定 GET 请求具有正确的事件参数吗? 我认为还有其他东西正在发出 GET 请求。可能是该网格的一些 AJAX 魔法、一些资源或 AJAX PageMethod 调用或 URL 重写之类的东西。
页面名称是 default.aspx 还是类似的名称?有时在某些浏览器中(不记得细节)获取图像左右(不记得确切情况)会使浏览器也点击“samefolder/”URL,从而打开默认页面。
用 FireBug 检查请求,看看它告诉了什么。
【讨论】:
确实是网格隐藏的ajax调用,OnRowSelected首先触发OnRowDeselected,即当你选择一行时,之前选中的行触发OnRowDeselected,默认情况下会发出get请求。以上是关于__doPostBack() 是不是有可能发送 GET 请求?的主要内容,如果未能解决你的问题,请参考以下文章
防止 ASP.net __doPostback() 来自 UpdatePanel 中的 jQuery submit()
__doPostBack方法解析 __VIEWSTATE __EVENTTARGET __doPostBack __EVENTARGUMENT