ASP.NET如何知道在回发期间要触发哪个事件?

Ton*_*ich 3 asp.net webforms

在回发期间,__EVENTTARGET表单变量保存name of the control发回回的内容.如果控件支持多个服务器端事件,ASP.NET如何知道为该控件触发哪个事件?

das*_*ash 5

正如Wiktor所提到的,ASP.Net中的许多控件已经为您构建,以便以某种方式使用; 按钮单击,文本更改,所选索引已更改 - 这些控件已构建为执行某些操作,这就是为什么它们按照它们的方式工作.

从文档:

由于大多数ASP.NET服务器控件事件需要往返服务器进行处理,因此它们会影响页面的性能.因此,服务器控件提供有限的事件集,通常只提供点击类型事件.某些服务器控件支持更改事件.例如,当用户单击该框时,CheckBox Web服务器控件会在服务器代码中引发CheckedChanged事件.某些服务器控件支持更抽象的事件.例如,Calendar Web服务器控件引发SelectionChanged事件,该事件是click事件的更抽象版本.

当然,您可以编写自己的客户端控件,但这需要更多的工作.ASP.Net中的文章服务器事件处理讨论了这一点.但总结一下,重要的部分是实现RaisePostBackEvent

如果要提供多个事件,则可以更改从客户端发送到此方法的事件参数,并引发相应的服务器端事件.这可以像if语句一样简单.一个基本的例子是有两个客户端javascript事件,每个事件都可以调用:

__doPostBack(controlId, 'superclick');

__doPostBack(pageId, 'superchange');
Run Code Online (Sandbox Code Playgroud)

然后,在回发事件处理程序中,根据传递的参数调用所需的服务器端事件.一个简单的RaisePostBackEvent服务器端处理程序将看起来像:

  public void RaisePostBackEvent(string eventArgument){

     if(eventArgument == "superclick")
     {
        OnSuperClick(this, new EventArgs());
     }

     if(eventArgument == "superchange")
     {
        OnSuperChange(this, new EventArgs());
     }         

  }
Run Code Online (Sandbox Code Playgroud)