是否有可能__doPostBack()会发送GET请求?

时间:2010-03-16 18:03:01

标签: asp.net telerik telerik-grid dopostback

我遇到了telerik RadGrid的问题,我想启用多行选择。我还想在选择或取消选择行时转到服务器。我创建了一个javascript函数来处理Grid的客户端事件(OnRowSelected和OnRowDeSelected)。功能如下:

 function onOperationRowSelected(sender, eventArgs) {
            __doPostBack("<%=myControl.ClientID %>", "rowSelected:" + eventArgs.get_itemIndexHierarchical());
        }

另一个函数非常相似,唯一的区别是它发送字符串“rowDeselcted”而不是“rowSelected”。

在Page_Load上我检查请求是否是使用“IsPostBack”的Post请求,如果是,我检查它是否是rowSelected或rowdeselected。

我的问题是当我在网格上选择第一个raw时,发生了Post请求(这是预期的),但是,当我选择第二行时,会发出一个GET请求,这显然会导致IsPostBack返回假。

我在这里缺少什么?


编辑:我刚检查了Request对象,发现HttpMethod属性值为“POST”。为什么HTTP POST请求和IsPostBack返回false?

3 个答案:

答案 0 :(得分:2)

该功能尊重<form>的操作。这是__doPostBack的作用:

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

所以它会做任何形式的设置,这通常只是在asp.net中发布。

有可能吗?是的,绝对的,为什么它会在你的情况下发生我不确定。

答案 1 :(得分:2)

如果没有看到网格生成的标记,我假设它使用带有javascript应用的点击处理程序的链接来进行回发。我认为最可能的罪魁祸首是一个javascript错误,它阻止了处理程序的触发,这为你提供了应用处理程序的锚的默认行为,在本例中是一个GET。我可以给你的最好建议是在Firefox / Firebug中查看它,看看控制台中是否有任何错误。

也就是说,您可能希望构建应用程序,以便在禁用javascript时它可以正常工作,并且如果您最终得到GET请求,它们都会纠正错误并找出如何响应。

答案 2 :(得分:1)

您确定GET请求具有正确的事件参数吗? 我认为还有其他东西正在提出GET请求。可能是网格上的某些AJAX魔法,某些资源或AJAX PageMethod调用或URL重写事物或类似的东西。

页面名称是default.aspx还是类似的?有时在某些浏览器中(无法记住细节)获取图像左右(无法记住确切情况)使浏览器也会点击“samefolder /”URL,从而打开默认页面。

使用FireBug检查请求并查看它的内容。