博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net用户控件
阅读量:5153 次
发布时间:2019-06-13

本文共 4739 字,大约阅读时间需要 15 分钟。

用户控件

用户控件是个什么东西?
自定义的反复重用的控件集合

好处?

1.代码重用
2.结构良好
3.分工开发
4.局部缓存

难点:

一.交换信息:

注意信息的交换只在相邻层之间进行交换,如果是嵌套交换信息除Session外都需要一层一层的写代码交互

(一)从页面向用户控件交换信息。代码写在页面中。

1.用户控件名.FindControl("用户控件中的控件的ID")

TextBox textBox1 = WUC1.FindControl("TextBox1") as TextBox;

暴力转换:尽量少用

案例:添加按钮click属性,点击后往用户控件中传信息

protected void btn_Click(object sender, EventArgs e)    {        string s = Label1.Text;        TextBox textbox1 = WebUC1.FindControl("TextBox1") as TextBox;        textbox1.Text = s;    }

效果如图:

 

 

2.事先在用户控件中定义public属性,通过属性为里面的控件赋值或取值。

用户控件中的代码:

public string TextValue    {        get         {            return TextBox1.Text;        }        set        {            TextBox1.Text = value;//设置文本框里面的值        }    }

 写好属性之后会在设计界面用户控件属性的杂项中出现该属性名,如下图

页面中的代码:

同方法一:在按钮上添加click事件

protected void Button1_Click(object sender, EventArgs e)    {        WebUC1.TextValue = Label2.Text;    }

效果如图:

(二)从用户控件向页面交换信息。代码要写用户控件。

1.session

第一步:在用户控件的按钮中把数据放在Session中。

给button加click事件

protected void Button1_Click(object sender, EventArgs e)    {        Session["text"] = TextBox1.Text;    }

第二步:在页面的OnLoadComplete事件中,从Session中取出数据来,显示在页面上。 

在页面中重写override函数 onloadComplete

这样在页面加载完成后执行下面的方法,判断Session["text"]中如果没有信息就什么也不执行,注意第一行 base.OnLoadComplete(e)不能删

protected override void OnLoadComplete(EventArgs e)    {        base.OnLoadComplete(e);        if (Session["text"]!=null)        {            Label3.Text = Session["text"].ToString();        }           }

 

 

效果如图:

 

2.代理、委托 delegate

指向方法(动作)的引用。 Dog d = new Dog();

类比:类的使用 - 指向对象的引用
类的使用步骤:
第一步:用class 关键字定义一个类的类型
public class Dog
{
//成员变量定义
//成员属性定义
//成员方法定义
}
第二步:使用这个新的类型定义一个变量(类的变量)引用。
Dog d;

第三步:把这个变量引用指向一个新对象。

d = new Dog();

第四步:通过调用引用,实现对对象的调用。

d.Name
d.Bark()

代理的使用步骤:

第一步: 使用 delegate 定义一个新的代理类型。
public delegate 返回类型 代理类型名( 参数定义);
例如:public delegate void ShowDelegate(string s);
第二步:使用新的代理类型定义一个变量(代理变量)
ShowDelegate Show;
第三步:把代理变量指向一个新的方法
Show = new ShowDelegate(方法名);
第四步:通过调用代理来实现对方法的调用。
Show("hello");

 案例:从一个用户控件中向另一个用户控件加添加节点

定义一个delegate代理ShowDelegate,然后生命一个代理实例化

public delegate void ShowDeletgate();//定义代理    public ShowDeletgate Show;//实例化

给button写click事件

protected void btnAddNode_Click(object sender, EventArgs e)    {        if (Session["list"] == null)        {            List
temp = new List
(); Session["list"] = temp; } List
list = Session["list"] as List
; list = list.OrderBy(p => p.Orders).ToList(); int order = 1; if (list.Count>0) { order = list.Last().Orders.Value+1; } FlowPath data = new FlowPath(); if (Request["rbnode"] != null)//判断是否选择了radio { data.Code = DateTime.Now.ToString("yyyyMMddhhmmss") + order + Session["uid"].ToString(); data.EmpId = Request["rbnode"].ToString(); data.Orders = order; list.Add(data); Session["list"] = list; if (Show != null)//调用代理,代理名不加括号 { Show();//使用代理--类似于使用方法 } } else { Label1.Text = "请选择要加载的节点"; }   }

 给代理写所需要绑定的方法(可以是在另一个用户控件上--谁需要这个方法在谁上面写)

public void ShowSession()    {        if (Session["list"]!=null)        {            Repeater1.DataSource = Session["list"] as List
; Repeater1.DataBind(); } }

给代理绑定方法--写在加载的页面上load里面,注意不要写在if(!IsPostBack中)因为每次加载都需要绑定

绑定使用方法同属性如:

UserList1.Show(show代理) = new UserList.ShowDeletgate(NodesShow1.ShowSession--这个ShowSession是个方法但是不加小括号)

 

protected void Page_Load(object sender, EventArgs e)    {        if (Session["uid"] == null)        {            Response.Redirect("login.aspx");        }        if (!IsPostBack)        {                   }        UserList1.Show = new UserList.ShowDeletgate(NodesShow1.ShowSession);//注意这里绑定方法的时候是 方法名 不带小括号    }

 

 

二.路径:

1.控件路径:图片、超链接

使用服务端的控件。标准控件或者HTML标记加上runat=server.

这样服务端就会自动转换成正确的路径出来。

如:

注意加runat="sever"必须加上id=""

 

 

2.样式表中值的路径:background-image:url(路径)

不要使用内联样式,使用外部样式表来控制图片路径。

首先在解决方案下添加外部样式表

 

代码如下:

.dd {    background-image:url(../images/h.png);}

注意路径必须正确:确保从样式表可以找到对应的路径

然后,给需要加样式表的标签一个class="dd"名(这里用的.dd给class 也可以给加id="dd"样式表改为#dd)

最后在需要使用的页面把样式表拖到,源页面的<head></head>中

 

 

 

3.外部资源路径 - 用户控件中引入外部脚本文件

使用 string path = ResoveClientUrl("服务器端路径"); //返回的是客户端对应的路径

首先在用户控件上加<script></script>指定路径写一个函数 注意不是# 是=,如下

然后在解决方案下添加外部脚本

 

脚本代码:

alert("这是外部脚本文件的内容")

最后在cs代码界面添加对应的方法

 

public string ShowScriptPath()    {        string path = "Scripts/JavaScript.js";//外部样式表存放路径        path = this.ResolveClientUrl(path);//重新解析为可识别的路径        return path;    }

 

 

4.C#代码的调用路径

Response.Redirect("页面");
使用应用程序路径的根来解决

在路径前面加上一个 ~ 符号--从跟目录开始寻找

Response.Redirect("~/Default.aspx")

转载于:https://www.cnblogs.com/IT1517/p/4768351.html

你可能感兴趣的文章
深入理解 JavaScript 事件循环(一)— event loop
查看>>
Hive(7)-基本查询语句
查看>>
注意java的对象引用
查看>>
C++ 面向对象 类成员函数this指针
查看>>
NSPredicate的使用,超级强大
查看>>
自动分割mp3等音频视频文件的脚本
查看>>
判断字符串是否为空的注意事项
查看>>
布兰诗歌
查看>>
js编码
查看>>
Pycharm Error loading package list:Status: 403错误解决方法
查看>>
steps/train_sat.sh
查看>>
转:Linux设备树(Device Tree)机制
查看>>
iOS 组件化
查看>>
(转)Tomcat 8 安装和配置、优化
查看>>
(转)Linxu磁盘体系知识介绍及磁盘介绍
查看>>
tkinter布局
查看>>
命令ord
查看>>
Sharepoint 2013搜索服务配置总结(实战)
查看>>
博客盈利请先考虑这七点
查看>>
使用 XMLBeans 进行编程
查看>>