我有一种情况,我想使用几个服务器端控件,它们具有客户端状态。我想检查事件发生时的状态(如各种点击),当状态是我想要的时候,我想回发到服务器并进行一些处理。
特别是,在我想要回发之前,我需要确保至少有3个不同的控件可供选择。由于没有特定的控件可以启动回发,我只想捕获客户端的选择事件,然后调用__doPostBack()(或类似的东西)来启动处理。所以我已经禁用了所有服务器端事件,关闭了autopostback,并连接了一些javascript来处理这个问题。
我已经编写并运行了所有客户端代码,但是我似乎无法让服务器端识别回发。我重写了RaisePostBackEvent,并检查了eventArgument以获取我的自定义参数。这不起作用,因为从不调用RaisePostBackEvent。
启用自动后备功能时,此方法有效(例如,Telerik Radgrid OnSelectChanged服务器端事件)。
有关处理此问题的最佳方法的任何建议吗?
更新
当被问到示例代码时,就像我上面说的那样。不是火箭科学。
使用Javascript:
function CheckState(source, eventArgs) {
// logic to test state of controls
__doPostBack("", "DoMyWork:");
}
然后在代码背后我有:
protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
if (eventArgument.IndexOf("DoMyWork") != -1)
{
// do my server side work.
}
}
解决方案:
因为这有点令人困惑。我只想说明我的解决方案。
我使用了回发中涉及的其中一个控件,并使用了它的唯一ID作为控件参数,然后将我的方法用作事件。
答案 0 :(得分:5)
如果你调用没有参数的__doPostBack(),asp.net无法弄清楚哪个控件触发了事件,因此无法确定要触发的事件。 你需要将控件的名称作为参数添加到__doPostBack()和一个参数,如果你不需要一个可以为null
__doPostBack('textbox1','') //no arguments
__doPostBack('textbox1','12')
你可以从后面的代码中读取你传入的参数:
Dim arg As String = Request("__EVENTARGUMENT")