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

注意:创建好用户控件后,必须添加到其他web页中才能显示出来,不能直接作为一个网页来显示,因此也就不能设置用户控件为“起始页”。


用户控件与ASP.NET网页的区别

a、 用户控件的扩展名为.ascx

b、 用户控件中没有@Page指令,而是包含@Control指令,该指令对配置及其他属性进行定义。

c、 用户控件不能作为独立文件运行,而必须像处理任何控件一样,将它们添加到asp.net页中。

d、 用户控件中没有html、body和form元素。


优点:

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


难点:
一.交换信息:
(一)从页面向用户控件交换信息。代码写在页面中。
1.用户控件名.FindControl("用户控件中的控件的ID")----暴力转换,破坏语言结构
TextBox textBox1 = WUC1.FindControl("TextBox1") as TextBox;

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

//用户控件中的代码:
public string TextValue
{
get
{
return TextBox1.Text;
}
set
{
TextBox1.Text = value;
}
}
//页面(aspx)中的代码:
WUC1.TextValue = txt.Text;

关于属性赋值的扩展:做一个分类新闻显示:

    //给用户控件添加自定义属性 
    //1、定义属性类型:私有成员
private string _BackColor; //2、添加字符的描述(WebBrowsable(true) 提示是否在属性面板中显示)
[Personalizable(), WebBrowsable(true), WebDescription("这是一个字体颜色的参数"), WebDisplayName("请输入一个颜色名称")] //3、公开属性
public string BackColor
{
Panel1.BackColor = System.Drawing.Color.FromName(value);
}
public string BackColor
{
set
{
Panel1.BackColor = System.Drawing.Color.FromName(value);
}
}
private string _NewType = "";
public string NewType
{
set
{
_NewType = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
var query = _context.News.Where(p => p.type == _NewType);
Repeater1.DataSource = query;
Repeater1.DataBind();
}
}
<form id="form1" runat="server">
<div style="margin: 0 auto; width: 40%">
国内新闻:<uc1:NewsUC ID="NewsUC1" runat="server" NewType="" BackColor="red" />
<br />
国际新闻:<uc1:NewsUC ID="NewsUC2" runat="server" NewType="" BackColor="orange" />
<br />
娱乐新闻:<uc1:NewsUC ID="NewsUC3" runat="server" NewType="" BackColor="pink" />
<br />
财经新闻:<uc1:NewsUC ID="NewsUC4" runat="server" NewType="" BackColor="green" /> </div>
</form>
 
 

参考:http://www.cnblogs.com/xieon1986/archive/2013/01/28/2880366.htmlhttp://www.cnblogs.com/zhijianliutang/archive/2011/11/16/2250759.htmlhttp://bbs.csdn.net/topics/340183505

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

第一步:在用户控件的按钮中把数据放在Session中。
第二步:在页面的OnLoadComplete事件中,从Session中取出数据来,显示在页面上。(了解页面(aspx)与用户控件(ascx)的执行顺序来完成传值))
override重写Page_Load的OnLoadComplete
代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//
TestUC1.Show = new TestUC.ShowDelegate(SetValue);
}
private void SetValue(string s)
{
Label1.Text = s;
}
protected override void OnLoadComplete(EventArgs e)
{
base.OnLoadComplete(e);
if (Session["data"] != null)
{
Label1.Text = Session["data"].ToString();
}
}
}

关于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方法,使用 string path = ResoveClientUrl("服务器端路径");  //返回的是客户端对应的路径

//HTML代码:
<script src="<%= ShowScriptPath() %>" ></script>
//C#代码:
public string ShowScriptPath()
{
string path = "Scripts/JavaScript.js";
path = this.ResolveClientUrl(path);
return path;
}

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)在后台代码中,将public class 声明的页类删除,改为用户控件的名称,并且将

System.Web.UI.Page   =>改为=>   System.Web.UI.UserControl

Public  partial  class_Default:System.Web.UI.Page    =>改为=>   Public pattial class WebUserControl:System .Web.UI.UserControl

(4)最后,在解决方案资源管理器中,将文件的扩展名从.aspx修改为.ascx,其代码后置文件会随之改变,从.aspx.cs改变为.asxc.cs。

Web用户控件的更多相关文章

  1. ASP.NET Web用户控件

    用户控件可用来实现页面中可重用的代码,是可以一次编写就多处方便使用的功能块.它们是 ASP.NET控件封装最简单的形式.由于它们最简单,因此创建和使用它们也是最简单的.用户控件实际上是把已有的服务器控 ...

  2. js清空web用户控件的值

    假设你的用户控件里面有: <asp:DropDownList ID="DropDownList1" runat="server"> <asp: ...

  3. Web用户控件开发--星型评分控件

    本文中分享一个实现简单,使用方便的星型评分控件. 一:贴几张测试图片先: 二.星型评分控件的实现: RatingBar.ascx: <%@ Control Language="C#&q ...

  4. Web用户控件开发--分页控件

    分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一些可以分页的数据控件,但其分页功能并不尽如人意.本文对于这些数据控件的假分页暂且不表,如有不明白的同学请百Google度之. ...

  5. net7:Web用户控件ascx的使用及其动态加载

    原文发布时间为:2008-07-30 -- 来源于本人的百度文章 [由搬家工具导入] Web用户控件test.ascx的源代码: using System;using System;using Sys ...

  6. 033. asp.netWeb用户控件之二将页面转换成web控件和使用Web控件显示热点新闻

    访问Web用户控件的属性 ASP.NET提供的各种服务器控件都有其自身的属性和方法,程序开发人员可以灵活地使用服务器控件中的属性和方法开发程序.在用户控件中,程序开发人员也可以自行定义各种属性和方法, ...

  7. 038. asp.netWeb用户控件之六实现日期选择的用户控件

    web用户控件的ascx代码: <%@ Control Language="C#" AutoEventWireup="true" CodeFile=&qu ...

  8. 032. asp.netWeb用户控件之一初识用户控件并为其自定义属性

    Web用户控件的优点: 可以将常用的内容或者控件以及控件的运行程序逻辑, 设计为用户控件, 以后便可以在多个页面中重复使用该用户控件, 从而省去许多重复性的工作. 如网页上的导航栏, 几乎每个页面都需 ...

  9. [转]Oracle分页之二:自定义web分页控件的封装

    本文转自:http://www.cnblogs.com/scy251147/archive/2011/04/16/2018326.html 上节中,讲述的就是Oracle存储过程分页的使用方式,但是如 ...

随机推荐

  1. 统计单词频率--map

    问题描述: 输入一个单词列表,每行一个单词,统计单词出现的频率 思路: 主要是使用c++中的map容器.map实质上是一个二叉查找树,可以做到插入.删除.查询,平均查询时间在O(logn).n为map ...

  2. android软键盘enter键

    enter键,回车键,电脑键盘上enter键就有多种响应.android软键盘也不例外 你在EditText上输入以后,想在下一行输入框输入,可能需要去点击下一行输入框,让它获取焦点,也可能要隐藏软键 ...

  3. stm32之GPIO(二)

    输入上拉:当IO口作为输入时,比如按键输入,而按键是与地连接,按下时为低电平,则没按下时该IO口应为高电平,上拉即是该IO口通过一个电阻与电源相连,则没按下时为高电平,按下即为低电平. 输入下拉:同理 ...

  4. UILabel可以显示html文本

    NSString * htmlString = @"<html><body> Some html string \n <font size=\"13\ ...

  5. 使用SourceTree Push 出现 POST git-receive-pack (chunked) 的解决方法

    在使用SourceTree上传资料的时候,遇到 POST git-receive-pack (chunked) 从 stackoverflow 看到这样一则 This is a bug in Git; ...

  6. python——登陆接口设计(循环方法)

    近日重新整理了登陆接口设计程序,感觉以前的代码没有注释,让园子的其他童鞋读起来比较费劲.也没有流程图和程序运行说明. 1.流程图 2.user_file.txt&lock_file.txt文件 ...

  7. RunLoop学习总结

    开始 很久之前就看了一次YY的文章,没看懂.后来又看了sunny的视频和叶孤城的直播的视频,找了很多资料,对RunLoop也越来越清晰,然后又看了两三次YY的文章,虽然还没完全看懂,不得不说写的非常好 ...

  8. Windows Phone 8初学者开发—第19部分:设置RecordAudio.xaml页面

    原文 Windows Phone 8初学者开发—第19部分:设置RecordAudio.xaml页面 原文地址:  http://channel9.msdn.com/Series/Windows-Ph ...

  9. Net::OpenSSH 使用例子

    [root@dr-mysql01 mojo]# cat a1.pl use Net::OpenSSH; my $host = '121.4xx.xx1.41'; my $user = 'root'; ...

  10. UVA 10041 (13.08.25)

     Problem C: Vito's family  Background The world-known gangster Vito Deadstone is moving to New York. ...