全国统一热线:
028-86758058
18980748058
购买流程
付款方式
常见问题
在线提问
续租服务
购物车(
0
件)
用户名:
密 码:
记住
首 页
HOME
域名注册
DOMAIN
虚拟主机
WEB HOST
成品网站超市
AUTO Site
VPS主机
VPS SERVER
云 主 机
CLOUD HOST
租用托管
SERVER
海外主机
HK HOST
代理专区
AGENT
客服中心
SERVICE
站长教程
SERVICE
欢迎光临西部数据云计算中心,我们将竭诚为您提供最优质的服务!
中文域名
域名转入
域名转出
DNS管理
动态域名
获取域名证书
域名停放
域名过户
集群主机
双线主机
基本主机
港台主机
论坛主机
Linux主机
Vip合租主机
超G型主机
ASP.net主机
Java主机
智能建站主机
网店主机
美国主机
数据库
成品网站超市
智能建站主机
集群VPS主机
国内VPS主机
香港VPS主机
美国VPS主机
云主机介绍
云主机购买
服务器租用
主机托管
常见问题
香港主机
港台主机
美国主机
国内免备案
步骤流程
代理级别
代理合同
代理模式
代理优势
在线申请
产品列表
常见问题
代理商分布图
常见问题
有问必答
跟踪提问
购买流程
产品价格
付款方式
常用软件
网站备案
续租服务
汇款确认
相关文档
联系我们
域名资讯
主机资讯
行业动态
网页制作
php教程
mysql教程
域名资讯
云计算资讯
网络编程
您当前的位置:
首页
>
网络编程
>
Net教程
[.net] 操纵自如-页面内的配合与通信
时间:2015-01-29 来源:互联网 作者:佚名
.NET的页面看似一个整体,却可能是由很多不同的区域组合而来的,常常用到的母版页、用户控件就是最鲜明的例子。
然而在一个页面内的元素要形成一个整体,就少不了控件之间的通信与传值,本文是个人在不断的使用过程中总结的一些东西,有谬误或有更好的解决方案,还请提出来。
在写这篇文章的过程中我做了一些一示例,以作佐证。这些示例的目的都是 在“A”中 把 “B”中 的一个Label的值改变。
这样的做法有什么意义?
比如说你在masterpage中含有一个GridView,在aspx改变了一些数据,而这些数据正是影响到masterpage中的GridView的呈现内容,那么你就有必要在aspx中通知masterpage更新了。本文的目的就是要说,如何去通知它的更新。
本文包括以下几个部分:
1、aspx与ascx的通信
2、master与aspx的之间的通信
3、master中的ascx 与 master中的aspx通信
4、ascx与ascx之间的通信
1、aspx与ascx的通信
一个简单的示例,在这个例子中,一共有两个文件:UserControl-Page.aspx和WebUserControl3.ascx,两个文件之中均含有一个TextBox、Label和一个Button
在这里,我们使用A和B来简称前者和后者。
要求的效果是:点击A中的Button,能将A中TextBox中的值赋给B中的Label;反之,点击B中的Butoon,要将B中TextBox中的值赋给A中的Label。
也就是说,它们两个能改变对方的控件内容。
首先说A->B
这是很简单的,在Ascx中写一个公共的方法,在aspx中调用就行了。
[Copy to clipboard] [ - ]CODE:
//这是在ascx中的方法,该方法将参数_value的值赋给Label。
public void setSelect(string _value)
{
lblMessage.Text = _value;
}
在aspx中直接调用它
[Copy to clipboard] [ - ]CODE:
protected void btnSet_Click(object sender, EventArgs e)
{
WebUserControl3_1.setSelect(txtValue.Text);// WebUserControl3_1是用户控件的ID
}
可能大家看得不是很明白,不过总之,在aspx中可以调用ascx中的公共方法,传入想传的参数,就OK了。
如果倒过来,由B->A。
在ascx中改变aspx中的一个Label,也只换种方式
[Copy to clipboard] [ - ]CODE:
Label lblMessage= (Label)Page.FindControl("lblMessage");
lblMessage.Text = txtValue.Text;
也就是说,可以在ascx中查找当前aspx页的控件ID,找到了,直接赋个值就行了。反正,只要找到这个控件,用起来就好像自己的一样。
2、master与aspx的通信
在master中访问aspx中的东西也是查找控件,和ascx中查找aspx中差不多
[Copy to clipboard] [ - ]CODE:
Label lblMessage= (Label)ContentPlaceHolder1.FindControl("lblMessage");
lblMessage.Text = txtValue.Text;
倒过来,aspx可以调用masterpage的公共方法
[Copy to clipboard] [ - ]CODE:
MasterPage master = (MasterPage)Page.Master;//转换为masterpage的类型
master.setValue(txtValue.Text);//调用masterpage的方法
3、master中的ascx 与 master中的aspx通信
从master中的ascx到master中的aspx,需要通过master,查找ContentPlaceHolder,再查找Label
[Copy to clipboard] [ - ]CODE:
MasterPage master = (MasterPage)Page.Master;
Label _lblMessage = (Label)master.FindControl("ContentPlaceHolder1").FindControl("lblMessage");
_lblMessage.Text = txtValue.Text;
aspx要想与masterpage的ascx联系,要先得到master,再查找ascx,再查找Label。
[Copy to clipboard] [ - ]CODE:
MasterPage master = (MasterPage)Page.Master;
Label lblMessage=(Label)master.FindControl("WebUserControl4_1").FindControl("lblMessage");
lblMessage.Text = txtValue.Text;
这个双方互通是一样的原理哦。
4、ascx与ascx之间的通信
这应该是最常见的情况,前段时间做的项目,分两个区域,用户在A区域从事活动,B区域记录下他活动的信息,这两个区域都是用户控件。
一种方法是从a.ascx中查找Aspx,再查找B.ascx,再查找Label。
这种方向理论上的行得通的,不过我没试,因为这种方法必须考虑B控件在A中的ID,我却不想与ID发生任何关系。
所以我用接口。
假设现有WebUserControl2.ascx想操纵WebUserControl1.ascx中的控件。
在app_code中新建一个IUserControl1.cs
内容:
[Copy to clipboard] [ - ]CODE:
public interface IUserControl1
{
void setSelect(string value);
}
在WebUserControl1.ascx继承该接口,并实现其方法。
[Copy to clipboard] [ - ]CODE:
public partial class UserControl_WebUserControl1 : System.Web.UI.UserControl, IUserControl1
{
public void setSelect(string _value)
{
lblMessage.Text = _value;
}
}
然后直接在webUserControl2.ascx调用webUserControl1.ascx中的方法
[Copy to clipboard] [ - ]CODE:
IUserControl1 userControl1 = (IUserControl1)Page.FindControl("WebUserControl1_1");//转化到接口去
userControl1.setSelect(txtValue.Text);//setSelect是webUserControl1.ascx中的方法,调用它。
这实际上是很好的一种方法,这样来做,其它类型的控件间通信应该都能实现,在那几天,我还一直沾沾自喜着呢。通过这一样一个例子,也发现接口确实不简单,真的是一个“接口”。
.net的partial类的引入使用我的可以在各个文件中实现一个,最后合并在一起,而通过这些小技巧,又可以把各部分联系起来,成为一个真正的“整体”。
我的blog:http://99love.blueidea.com。
其相关程序都附在附件中。
来顶一下
返回首页
推荐资讯
在Apache环境下成功的运行ASP.NET的
由于公司的产品在新的版本中,需要考虑一些新的部署方式,所
asp.net下gridview 批量删除的实现
要实现的效果很简单,看下图片:功能:选中CheckBox,后从数
相关文章
无相关信息
栏目更新
栏目热门
返回首页
关于我们
联系我们
付款方式
价格总览
资讯中心
友情链接
媒体关注
有问必答
投诉建议
网站备案
《中华人民共和国增值电信业务经营许可证》编号:川B2-20080058号
官方网址:
xibushuju.com
西部数据
Copyright © 2002~2015
天府快车
版权所有
电话总机:
028-86758058
(50线) 传真:
028-86758058