2

我在使用 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 返回 false。

我在这里想念什么?


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

4

3 回答 3

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 中发布。

那么有可能吗?是的,绝对是,我不确定为什么会发生这种情况。

于 2010-03-16T18:05:56.917 回答
2

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

也就是说,您可能希望构建应用程序,以便在禁用 javascript 时它可以工作,并纠正错误并弄清楚如果您最终收到 GET 请求时如何响应。

于 2010-03-16T18:07:00.633 回答
1

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

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

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

于 2010-03-17T06:22:37.523 回答