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

注意:创建好用户控件后,必须添加到其他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. .vimrc快捷键设置

    $ cat ~/.vimrc,centos7是在/etc/vimrc文件中配置. nmap <C-_>s :cs find s <C-R>=expand("<c ...

  2. 建房子之前先挖地基 - Java BlockingQueue理解

    最近一直在看<Think In Java>里关于并发部分的章节,读到第二十一章有一个有趣的比喻:必须先挖房子的地基,但是接下来可以并行的铺设钢结构和构建水泥部件,而这两项任务必须在混凝土浇 ...

  3. DIOR HOMME_百度百科

    DIOR HOMME_百度百科     DIOR HOMME    编辑    Dior Homme 男装品牌,中文名迪奥·桀傲,由迪奥 (Dior) 在2001年更名更来,品牌来源地法国.迪奥·桀傲 ...

  4. (3)选择元素——(2)文档对象模型(The Document Object Model)

    One of the most powerful aspects of jQuery is its ability to make selecting elements in the DOM easy ...

  5. Block动画 和 Spring动画

    Block动画: @interface BlockViewController () @property (weak, nonatomic) IBOutlet UIView *playView; @e ...

  6. windows 下搭建 apache + php52 + postgreSQL7/8/9环境

    apache和php安装参考:[转]Windows7 64bit下配置Apache+PHP+MySQL 我这主要讲配置  apache 支持 postgresql9数据库: 1.将php5文件夹下的p ...

  7. thiscall仅仅应用于“C++”成员函数(this指针存放于CX寄存器,参数从右到左压)

    _stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈.VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上" ...

  8. java的new BufferedReader(new InputStreamReader(System.in))

    流 JAVA /IO 基本小结 通过一行常见的代码讨论:new BufferedReader(new InputStreamReader(System.in)) /*** *** 看到这篇文章挺好的, ...

  9. SystemTap----将SystemTap脚本编译成内核模块

      当运行SystemTap脚本时,会根据脚本生成一个内核模块,然后插入到系统中执行后退出.这个过程总共分为5个阶段:parse, elaborate, translate, compile, run ...

  10. iOS插件化研究之中的一个——JavaScriptCore

    原文:p=191">http://chentoo.com/?p=191 一.前言 一样的开篇问题,为什么要研究这个?iOS为什么要插件化?为什么要借助其它语言比方html5 js甚至脚 ...