在回发期间,__EVENTTARGET
表单变量保存name of the control
发出回发。如果控件支持多个服务器端事件,ASP.NET 如何知道要为该控件触发哪个事件?
正如 Wiktor 提到的,ASP.Net 中的许多控件已经为您以某些方式使用而构建;按钮单击、文本更改、所选索引更改 - 这些控件是为了执行某些操作而构建的,这就是为什么他们以他们的方式工作 http://msdn.microsoft.com/en-us/library/y3bwdsh3.aspx.
从文档中:
因为大多数 ASP.NET 服务器控件事件都需要往返
服务器进行处理时,它们会影响页面的性能。
因此,服务器控件提供一组有限的事件,通常仅
点击类型事件。某些服务器控件支持更改事件。为了
例如,CheckBox Web 服务器控件引发 CheckedChanged 事件
当用户单击该框时在服务器代码中。一些服务器控件
支持更抽象的事件。例如,日历 Web 服务器
控件引发一个更抽象的 SelectionChanged 事件
点击事件的版本。
当然,您可以编写自己的客户端控件,但这需要做更多的工作。文章ASP.Net 中的服务器事件处理 http://msdn.microsoft.com/en-us/library/xax2hw3x.aspx讨论这个。但总而言之,重要的部分是实施引发回发事件 http://msdn.microsoft.com/en-us/library/system.web.ui.ipostbackeventhandler.raisepostbackevent.aspx
如果要提供多个事件,则可以改变从客户端发送到此方法的事件参数,并引发适当的服务器端事件。这可以像 if 语句一样简单。一个基本的例子是有两个客户端 JavaScript 事件,每个事件都可能调用:
__doPostBack(controlId, 'superclick');
__doPostBack(pageId, 'superchange');
然后,在回发事件处理程序中,根据传递的参数调用所需的服务器端事件。一个简单的 RaisePostBackEvent 服务器端处理程序将如下所示:
public void RaisePostBackEvent(string eventArgument){
if(eventArgument == "superclick")
{
OnSuperClick(this, new EventArgs());
}
if(eventArgument == "superchange")
{
OnSuperChange(this, new EventArgs());
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)