当前位置: 首页 > 编程语言 > C#

C#ASP.NET用户控件如何处理服务器端的div点击?Share

时间:2023-04-10 23:14:11 C#

C#ASP.NET用户控件如何处理div点击服务器端?我正在创建一个用户控件。用户控件是一个div,我想给它添加一个点击事件。编辑:具有此控件的页面必须处理此事件。我怎样才能做到这一点?首先,您需要在UserControl上定义一个事件,允许包含的UserControlPage注册和处理事件。例如:publicpartialclassMyUserControl:System.Web.UI.UserControl{//页面处理公共事件EventHandlerDivClicked的事件;protectedvirtualvoidOnDivClicked(EventArgse){if(DivClicked!=null)DivClicked(this,e);}protectedvoidPage_Load(objectsender,EventArgse){//页面加载代码在此处}}注意:如果您使用支持回发的控件,下一部分会更容易。但既然您想使用div,我将解释如何强制div进行回发。我要感谢MathewNolton的解决方案。因此,在您的UserControl的Page_Load方法中,您需要添加一个onClick属性来调用ASP.NET的__doPostback()javascript函数,该函数为您的div调用服务器。这是div回发到服务器的能力。此外,为了确定哪个控件导致回发,我提供了div的clientId以及一些符号以将我的回发与其他控件区分开来。请记住,当您在.ascx文件中定义一个div时,您必须分配一个id并设置runat="server"以便它可以在服务器端访问。好的,现在通过给div添加一个onclick属性,它会在任何时候被点击时回传到服务器。因此,当回发导致调用Page_Load时,我会检查是否是导致回发的div。如果是这样,我将引发由页面处理的UserControl的DivClicked事件。publicpartialclassMyUserControl:System.Web.UI.UserControl{//事件定义和引发方法...protectedvoidPage_Load(objectsender,EventArgse){//@@@@将表示这是我提供的参数。字符串参数="@@@@"+divClickableDiv.ClientID;//给onClick添加postback方法divClickableDiv.Attributes.Add("onClick",Page.ClientScript.GetPostBackEventReference(divClickableDiv,arg));if(IsPostBack){//获取回发的事件参数。stringeventArg=Request["__EVENTARGUMENT"];//判断postback是否是我添加的自定义postback。if(!string.IsNullOrEmpty(eventArg)&&eventArg.StartsWith("@@@@")){//如果div//导致回发,则引发此UserControl的点击事件。如果(eventArg==arg)OnDivClicked(EventArgs.Empty);}}}}应该为UserControl执行此操作,现在您在DivClicked中只需在页面上注册DivClicked事件。遗憾的是,您不会获得注册事件的设计时支持。但是,您仍然可以将代码添加到.aspx页面。在放置UserControl的页面上,向UserControl添加一个名为OnXXX的属性,其中XXX是名称事件。因此,对于我上面的示例,我将在页面上定义我的UserControl,如下所示:现在您将处理程序代码添加到页面的代码隐藏文件(假设您正在使用代码隐藏),如下所示:Web.UI.Page{//每当单击MyUserControl中的div时调用。protectedvoidWebUserControl1_DivClicked(objectsender,EventArgse){//在这里处理Div点击事件。}}应该这样做。我希望这篇文章可以帮助你。...Rocka的答案很接近,但不太正确(因为它对我不起作用,所以我想出了原因)。Rocka的usercontrol的代码位不错://处理公共事件的页面事件EventHandlerDivClicked;protectedvirtualvoidOnDivClicked(EventArgse){if(DivClicked!=null)DivClicked(this,e);使用UserControl时,以下内容不起作用:OnDivClicked不是事件处理程序,它是一个函数,因此您不能对其进行分配。更不用说,当函数触发时,实际的事件处理程序变量为空,因此它什么都不做。正确的方法是:这会将MyUserControl1_DivClicked指定为DivClicked的处理程序。可悲的是,这实际上并没有起作用,所以在页面的Page_Load的代码隐藏中,改为:this.MyUserControl1.OnClick+=newEventHandler(MyUserControl1);此外,作为旁注,如果您将div设置为runat="server",则OnClick将作为您可以挂钩的事件公开。您所需要的只是用户控件中EventHandler的passthru属性。在您的ItemTemplate中使用asp:PanelINSTEADOFdiv标签(面板呈现为div)并设置Visibility属性,如下所示:CodeBehind以上是C#学习教程:HowC#ASP.NETUserControlhandlesdivclickserverside?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注——PanelImgFeatured=(Panel)e.Row.FindControl("ImgFeatured");ImgFeatured.Visible=true;本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: