我遇到了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?
答案 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检查请求并查看它的内容。