在回发期间,__EVENTTARGET表单变量保存name of the control发回回的内容.如果控件支持多个服务器端事件,ASP.NET如何知道为该控件触发哪个事件?
正如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)
| 归档时间: |
|
| 查看次数: |
6691 次 |
| 最近记录: |