Web用户控件
2015-08-27 16:35
399 查看
用户控件是个什么东西?
自定义的反复重用的控件集合
注意:创建好用户控件后,必须添加到其他web页中才能显示出来,不能直接作为一个网页来显示,因此也就不能设置用户控件为“起始页”。
用户控件与ASP.NET网页的区别
a、用户控件的扩展名为.ascx
b、用户控件中没有@Page指令,而是包含@Control指令,该指令对配置及其他属性进行定义。
c、用户控件不能作为独立文件运行,而必须像处理任何控件一样,将它们添加到asp.net页中。
d、用户控件中没有html、body和form元素。
优点:
1.代码重用
2.结构良好
3.分工开发
4.局部缓存
难点:
一.交换信息:
(一)从页面向用户控件交换信息。代码写在页面中。
1.用户控件名.FindControl("用户控件中的控件的ID")----暴力转换,破坏语言结构
TextBoxtextBox1=WUC1.FindControl("TextBox1")asTextBox;
2.事先在用户控件中定义public属性,通过属性为里面的控件赋值或取值。
关于属性赋值的扩展:做一个分类新闻显示:
参考:/article/5966162.html,/article/4841675.html,http://bbs.csdn.net/topics/340183505
(二)从用户控件向页面交换信息。代码要写用户控件。
1.session
第一步:在用户控件的按钮中把数据放在Session中。
第二步:在页面的OnLoadComplete事件中,从Session中取出数据来,显示在页面上。(了解页面(aspx)与用户控件(ascx)的执行顺序来完成传值))
override重写Page_Load的OnLoadComplete
代码:
关于OnLoadComplete:MSDN:https://msdn.microsoft.com/zh-cn/library/system.web.ui.page.onloadcomplete%28VS.80%29.aspx(备注)-------在页加载阶段结束时引发LoadComplete事件。
注意:当页面调用时,先判断Session[“data”]中是否有数据,以免出现未将对象引用到实例的错误
2.代理、委托(delegate)--指向方法的引用,其实就是一个特殊的方法。
接触过C语言的,可将委托理解为:一种特殊的指针集合,只不过是方法的指针。
二.路径:
1.控件路径:图片、超链接
1).使用服务端的控件。
2).标准控件或者HTML标记加上runat=server.(加这个属性必须叫id属性)
这样服务端就会自动转换成正确的路径出来。
2.样式表中值的路径:background-image:url(路径)
不要使用内联样式,使用外部样式表来控制图片路径。(找到一个第三方(外部样式表文件相对于图片文件夹是固定的)来帮你绝对定位)
3.外部资源路径-用户控件中引入外部脚本文件
写一个ShowScriptPath方法,使用stringpath=ResoveClientUrl("服务器端路径");//返回的是客户端对应的路径
4.C#代码的调用路径--(~这种放只适合c#下其他语言不通用)
Response.Redirect("页面");
使用应用程序路径的根来解决
Response.Redirect("~/Default.aspx");
将web网页转化为用户控件----摘录自(沁园春www.qinychun.com)
(1)在.aspx(Web网页的扩展名)文件的HTML视图中,删除<html>、<head>、<body>以及<form>等标记。
(2)将@Page指令修改为@Control,并将CodeFile属性修改成以.ascx.cs为扩展名的文件。
(3)在后台代码中,将publicclass声明的页类删除,改为用户控件的名称,并且将
System.Web.UI.Page=>改为=>System.Web.UI.UserControl
Publicpartialclass_Default:System.Web.UI.Page=>改为=>PublicpattialclassWebUserControl:System.Web.UI.UserControl
自定义的反复重用的控件集合
注意:创建好用户控件后,必须添加到其他web页中才能显示出来,不能直接作为一个网页来显示,因此也就不能设置用户控件为“起始页”。
用户控件与ASP.NET网页的区别
a、用户控件的扩展名为.ascx
b、用户控件中没有@Page指令,而是包含@Control指令,该指令对配置及其他属性进行定义。
c、用户控件不能作为独立文件运行,而必须像处理任何控件一样,将它们添加到asp.net页中。
d、用户控件中没有html、body和form元素。
优点:
1.代码重用
2.结构良好
3.分工开发
4.局部缓存
难点:
一.交换信息:
(一)从页面向用户控件交换信息。代码写在页面中。
1.用户控件名.FindControl("用户控件中的控件的ID")----暴力转换,破坏语言结构
TextBoxtextBox1=WUC1.FindControl("TextBox1")asTextBox;
2.事先在用户控件中定义public属性,通过属性为里面的控件赋值或取值。
//用户控件中的代码: publicstringTextValue { get { returnTextBox1.Text; } set { TextBox1.Text=value; } } //页面(aspx)中的代码: WUC1.TextValue=txt.Text;
关于属性赋值的扩展:做一个分类新闻显示:
//给用户控件添加自定义属性
//1、定义属性类型:私有成员 privatestring_BackColor; //2、添加字符的描述(WebBrowsable(true)提示是否在属性面板中显示) [Personalizable(),WebBrowsable(true),WebDescription("这是一个字体颜色的参数"),WebDisplayName("请输入一个颜色名称")] //3、公开属性 publicstringBackColor { Panel1.BackColor=System.Drawing.Color.FromName(value); }
publicstringBackColor { set { Panel1.BackColor=System.Drawing.Color.FromName(value); } } privatestring_NewType="0"; publicstringNewType { set { _NewType=value; } } protectedvoidPage_Load(objectsender,EventArgse) { if(!IsPostBack) { varquery=_context.News.Where(p=>p.type==_NewType); Repeater1.DataSource=query; Repeater1.DataBind(); } }
<formid="form1"runat="server"> <divstyle="margin:0auto;width:40%"> 国内新闻:<uc1:NewsUCID="NewsUC1"runat="server"NewType="0"BackColor="red"/> <br/> 国际新闻:<uc1:NewsUCID="NewsUC2"runat="server"NewType="1"BackColor="orange"/> <br/> 娱乐新闻:<uc1:NewsUCID="NewsUC3"runat="server"NewType="2"BackColor="pink"/> <br/> 财经新闻:<uc1:NewsUCID="NewsUC4"runat="server"NewType="3"BackColor="green"/> </div> </form>
参考:
(二)从用户控件向页面交换信息。代码要写用户控件。
1.session
第一步:在用户控件的按钮中把数据放在Session中。
第二步:在页面的OnLoadComplete事件中,从Session中取出数据来,显示在页面上。(了解页面(aspx)与用户控件(ascx)的执行顺序来完成传值))
override重写Page_Load的OnLoadComplete
代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
publicpartialclass_Default:System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
//3
TestUC1.Show=newTestUC.ShowDelegate(SetValue);
}
privatevoidSetValue(strings)
{
Label1.Text=s;
}
protectedoverridevoidOnLoadComplete(EventArgse)
{
base.OnLoadComplete(e);
if(Session["data"]!=null)
{
Label1.Text=Session["data"].ToString();
}
}
}
关于OnLoadComplete:MSDN:
注意:当页面调用时,先判断Session[“data”]中是否有数据,以免出现未将对象引用到实例的错误
2.代理、委托(delegate)--指向方法的引用,其实就是一个特殊的方法。
接触过C语言的,可将委托理解为:一种特殊的指针集合,只不过是方法的指针。
二.路径:
1.控件路径:图片、超链接
1).使用服务端的控件。
2).标准控件或者HTML标记加上runat=server.(加这个属性必须叫id属性)
这样服务端就会自动转换成正确的路径出来。
2.样式表中值的路径:background-image:url(路径)
不要使用内联样式,使用外部样式表来控制图片路径。(找到一个第三方(外部样式表文件相对于图片文件夹是固定的)来帮你绝对定位)
3.外部资源路径-用户控件中引入外部脚本文件
写一个ShowScriptPath方法,使用stringpath=ResoveClientUrl("服务器端路径");//返回的是客户端对应的路径
//HTML代码:
<scriptsrc="<%=ShowScriptPath()%>"></script>
//C#代码:
publicstringShowScriptPath()
{
stringpath="Scripts/JavaScript.js";
path=this.ResolveClientUrl(path);
returnpath;
}
4.C#代码的调用路径--(~这种放只适合c#下其他语言不通用)
Response.Redirect("页面");
使用应用程序路径的根来解决
Response.Redirect("~/Default.aspx");
将web网页转化为用户控件----摘录自(沁园春www.qinychun.com)
(1)在.aspx(Web网页的扩展名)文件的HTML视图中,删除<html>、<head>、<body>以及<form>等标记。
(2)将@Page指令修改为@Control,并将CodeFile属性修改成以.ascx.cs为扩展名的文件。
(3)在后台代码中,将publicclass声明的页类删除,改为用户控件的名称,并且将
System.Web.UI.Page=>改为=>System.Web.UI.UserControl
Publicpartialclass_Default:System.Web.UI.Page=>改为=>PublicpattialclassWebUserControl:System.Web.UI.UserControl
(4)最后,在解决方案资源管理器中,将文件的扩展名从.aspx修改为.ascx,其代码后置文件会随之改变,从.aspx.cs改变为.asxc.cs。
相关文章推荐
- XLT架构图(自己 画的)
- 应用下载网站的APK/IPA等常见MIME设置教程
- C# spreadsheet 相关操作
- quick-3.5 ActionTimeline的setLastFrameCallFunc调用会崩溃问题
- hdu 2602 Bone Collector 【01背包模板】
- 浅谈HTTP中Get与Post的区别
- UIImageView多张图片切换
- Linux 下curl模拟Http 的get or post请求。
- OC基础01
- Object Graph Serialization
- The Euler function(欧拉函数)
- C# datagridview 赋值方式
- SpringBoot自定义参数注解
- Maven pom.xml 配置详解
- android 学习笔记 服务的基本用法
- 8 个不得不说的 MySQL 陷阱
- 统治世界的十大算法
- linux常用命令(9):touch命令
- HDOJ 1716 排列2(next_permutation函数)
- appcompat v21: 让 Android 5.0 前的设备支持 Material Design