在.aspx中动态生成ascx用户控件 对div写点击事件
**//
//
//
//
由于我的ascx用户控件是用div做成的动态生成之后没有点击事件所以在网上找了好久都没有找到合适自己的
终于在看了大牛 sp1234 的一个回答之后总算是有了写眉目
今天将过程记录下来
先贴ascx代码
//前端
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="student.ascx.cs" Inherits="one.scripts.teacher.student" %>
<div style="background-image:url(../image/173.jpg);height:95px;width:170px;margin:20px 20px 20px 45px;float:left;" id="mydiv" runat="server">
<div style="margin-left:75px;margin-top:12px;font-size:15px;"> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
<div style="margin-left:75px;margin-top:12px;font-size:15px;"> <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label></div>
<div style="margin-left:75px;margin-top:12px;font-size:12px;"><asp:Label ID="Label3" runat="server" Text="Label"></asp:Label></div>
</div>
//.cs代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Threading.Tasks;
using System.ComponentModel;
namespace one.scripts.teacher
{
public partial class student : System.Web.UI.UserControl,IPostBackEventHandler
{
protected void Page_Load(object sender, EventArgs e)
{
}
[DefaultValue(typeof(string), ""), Browsable(true)
, Description("控件中的Lable的Text属性"), Category("Action")]
public string LableText1
{
get
{
return Label1.Text;
}
set
{
this.Label1.Text = value;
}
}
[DefaultValue(typeof(string), ""), Browsable(true)
, Description("控件中的Lable2的Text属性"), Category("Action")]
public string LableText2
{
get
{
return Label2.Text;
}
set
{
this.Label2.Text = value;
}
}
[DefaultValue(typeof(string), ""), Browsable(true)
, Description("控件中的Lable3的Text属性"), Category("Action")]
public string LableText3
{
get
{
return Label3.Text;
}
set
{
this.Label3.Text = value;
}
}
//这段是对三个lable写text属性
//
public event EventHandler<EventArgs> Click;
public void RaisePostBackEvent(string eventArgument)
{
if (this.Click != null)
this.Click(this, EventArgs.Empty);
}
protected void Page_PreRender(object sender,EventArgs e)
{
var ct1 = this.mydiv;
var script = this.Page.ClientScript.GetPostBackEventReference(this, string.Empty);
((HtmlContainerControl)ct1).Attributes["onclick"] = script;
}
//这段是获取div的ID,然后对div进行click脚本的注册
//
aspx中我用PlaceHolder作为容器
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
将ascx用户控件动态添加在PlaceHolder中
这边我写了一个for循环就不放出来了
for(int i=1;i<10;i++){
student f=(student)Page.LoadControl("~/scripts/teacher/student.ascx");
PlaceHolder1.Controls.Add(f);
f.Click += g_Click; //然后给它加点击事件
}
student是我的ascx用户控件
对了还要在aspx页面上将ascx用户控件注册一下像这样
放在aspx页面的最上方就行
<%@ Register Src="~/scripts/teacher/student.ascx" TagName="student1" TagPrefix="student1" %>
//
//
g_Click是自己写的
我的是这样的
private void g_Click(object sender, EventArgs e)
{
Response.Write("<script>alert('点击完成')</script>");
}
最后放上大牛的回答链接
[https://bbs.csdn.net/topics/330152344]
来源:CSDN
作者:qq_40824066
链接:https://blog.csdn.net/qq_40824066/article/details/103936110