.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中调用就行了。

//这是在ascx中的方法,该方法将参数_value的值赋给Label。
    public void setSelect(string _value)
    {
        lblMessage.Text = _value;
    }

在aspx中直接调用它

protected void btnSet_Click(object sender, EventArgs e)
    {
        WebUserControl3_1.setSelect(txtValue.Text);// WebUserControl3_1是用户控件的ID
    }

可能大家看得不是很明白,不过总之,在aspx中可以调用ascx中的公共方法,传入想传的参数,就OK了。

如果倒过来,由B->A。

在ascx中改变aspx中的一个Label,也只换种方式

Label lblMessage= (Label)Page.FindControl("lblMessage");
 lblMessage.Text = txtValue.Text;

也就是说,可以在ascx中查找当前aspx页的控件ID,找到了,直接赋个值就行了。反正,只要找到这个控件,用起来就好像自己的一样。

2、master与aspx的通信

在master中访问aspx中的东西也是查找控件,和ascx中查找aspx中差不多

Label lblMessage= (Label)ContentPlaceHolder1.FindControl("lblMessage");
 lblMessage.Text = txtValue.Text;

倒过来,aspx可以调用masterpage的公共方法

MasterPage master = (MasterPage)Page.Master;//转换为masterpage的类型
    master.setValue(txtValue.Text);//调用masterpage的方法

3、master中的ascx 与 master中的aspx通信

从master中的ascx到master中的aspx,需要通过master,查找ContentPlaceHolder,再查找Label

MasterPage master = (MasterPage)Page.Master;
 Label _lblMessage = (Label)master.FindControl("ContentPlaceHolder1").FindControl("lblMessage");
 _lblMessage.Text = txtValue.Text;

aspx要想与masterpage的ascx联系,要先得到master,再查找ascx,再查找Label。

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
内容:

public interface IUserControl1
{
    void setSelect(string value);
}

在WebUserControl1.ascx继承该接口,并实现其方法。

public partial class UserControl_WebUserControl1 : System.Web.UI.UserControl, IUserControl1
{
    public void setSelect(string _value)
    {
        lblMessage.Text = _value;
    }
}

然后直接在webUserControl2.ascx调用webUserControl1.ascx中的方法

IUserControl1 userControl1 = (IUserControl1)Page.FindControl("WebUserControl1_1");//转化到接口去
 userControl1.setSelect(txtValue.Text);//setSelect是webUserControl1.ascx中的方法,调用它。

这实际上是很好的一种方法,这样来做,其它类型的控件间通信应该都能实现,在那几天,我还一直沾沾自喜着呢。通过这一样一个例子,也发现接口确实不简单,真的是一个“接口”。

.net的partial类的引入使用我的可以在各个文件中实现一个,最后合并在一起,而通过这些小技巧,又可以把各部分联系起来,成为一个真正的“整体”。

操纵自如--页面内的配合与通信相关推荐

  1. js 跳转到指定位置 高德地图_在H5页面内通过地址调起高德地图实现导航

    项目中用到的一个功能是要通过点击地址来实现打开地图app实现地址导航. 如下图: 实现思路就是在H5页面内通过点击marker图标然后进行当前位置与页面上地址的路程规划与导航. 由于项目中用到的是高德 ...

  2. php js统计链接点击次数,JS实现在线统计一个页面内鼠标点击次数的方法

    本文实例讲述了JS实现在线统计一个页面内鼠标点击次数的方法.分享给大家供大家参考.具体实现方法如下: js记录鼠标的点击次数 function addCookie(name,cookievalue,t ...

  3. 网站页面内链如何布局才更有利于SEO?

    在网站优化中,网站内链所发挥的作用不言而喻.合理布局的内链不仅方便用户浏览,还更加吸引搜索引擎蜘蛛对网站的爬行和抓取,从而更高效的提升用户体验以及网站权重,对网站的收录量提升也有积极的作用,那么网站页 ...

  4. python爬虫如何从一个页面进入另一个页面-Python爬虫如何获取页面内所有URL链接?本文详解...

    如何获取一个页面内所有URL链接?在Python中可以使用urllib对网页进行爬取,然后利用Beautiful Soup对爬取的页面进行解析,提取出所有的URL. 什么是Beautiful Soup ...

  5. html怎样同框架页面内跳转,使用iframe框架时,实现子页面内跳转到整个页面,而不是在子页面内跳转...

    首先先来描述一下我所遇到的问题,我在一个首页的index.jsp页面中用到了iframe框架,见下图 在iframe中引入jsp页面的路径,是几个iframe框架组合成的一个完整的页面,但是他们的存在 ...

  6. android页面跳转时获取地址栏,Android 利用scheme页面内跳转协议进行跳转

    什么是 URL Scheme? android中的scheme是一种页面内跳转协议. 通过定义自己的scheme协议,可以非常方便跳转app中的各个页面: 通过scheme协议,服务器可以定制化告诉A ...

  7. python爬虫获取url_Python爬虫如何获取页面内所有URL链接?本文详解

    如何获取一个页面内所有URL链接?在Python中可以使用urllib对网页进行爬取,然后利用Beautiful Soup对爬取的页面进行解析,提取出所有的URL. 什么是Beautiful Soup ...

  8. vue 页面不置顶问题(页面内操作、页面跳转后) - 集合篇

    文章目录 vue 页面内切换dom,页面跳转后 都不置顶? 一.页面内操作: 1.1 代码如下: 二.页面之间跳转: 2.1 代码截图 · 说明: 2.2 增加代码 · 示下: 三.拓展 · (直接置 ...

  9. 微信H5页面内实现一键关注公众号

    H5页面内实现关注公众号的微信JSSDK没有相关接口开放,因此就得动点脑筋来实现该功能了.下面的方法就是通过一种非常蹊跷的方式实现的. 首先,需要在公众号内发表一篇原创文章,注意是原创文章,然后由另一 ...

最新文章

  1. 2022-2028年中国文化创意产业园区域发展模式与产业整体规划研究报告
  2. 设计模式之简单工厂模式学习笔记
  3. 《JavaScript高级程序设计 第3版》-学习笔记-1
  4. 实战tcpdump看RST
  5. Qt Creator文本
  6. 计算机设计大赛国奖作品_5. 模拟退火求解旅行商问题
  7. HTTP 协议中 Vary 的一些研究
  8. Enterprise Solution 应用程序开发框架培训
  9. 分析器错误信息: 未能加载类型命名空间.类...
  10. linux下静默安装weblogic 12
  11. wifi的country code
  12. linux安装vmware没有网络,关于无桌面的linux安装VMWare Tools配置的教程
  13. BeyondDesk 桌面小工具集合/时钟日历黄历便签相框天气时间/托盘时钟 [开放代码]
  14. php和plc哪个难,致PLC初学者的入门一课,七大误区如何解决?
  15. 可道云、NextCloud和Seafile使用体验比较哪个好用
  16. win7修复音频服务器,win7系统下realtek高清晰音频管理器没有声音怎么修复
  17. 交换机MAC地址学习与转发机制
  18. Openwrt 安全模式failsafe分析
  19. Google Earth Engine(GEE)——1981年至今全球逐日降水数据集(最终版)
  20. 安装移动视频监控 即时监控地铁车厢

热门文章

  1. VTK:Filtering之SelectionSource
  2. C++求一个整数的各位数字总和(附完整源码)
  3. C语言三路基数快排multikey quick sort算法(附完整源码)
  4. java集群解析文件_干货:一文详解Redis集群原理核心内容
  5. flex 换主轴后子元素占满_css flex justify-content属性,子元素在主轴上的对齐方式。...
  6. 定义范围中的备选方案生成、横向思维、创建WBS、工作包定义、WBS、确认范围过程和实施质量过程的关系、联合应用设计和质量功能展开QFD
  7. 关于Maven中的常见命令,通过命令的方式快速创建一个空的maven工程,将jar包打到maven仓库中
  8. 02_Nginx基本配置与参数说明 + 辅助命令
  9. 7.Eclipse中创建新Maven项目
  10. 【C语言】%[修饰符] 格式字符