.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. rsync - 远程同步工具
  2. Spring @Scheduled关键字
  3. WindowsLinux常用命令笔记
  4. svg笔记----------path篇
  5. php 時間比較,PHP用strtotime()函數比較兩個時間的大小實例詳解
  6. python移除字符串中指定元素_Python – 从作为另一个元素的子串的字符串列表中删除任何元素...
  7. tensorflow入门笔记(一)
  8. pythonsqlite导出json_使用python将mysql数据库的数据转换为json数据
  9. 计算机分区无法删除,电脑硬盘分区无法修改的解决方法分析
  10. MATLAB分集接收技术仿真,分集接收技术.doc
  11. 计算机专业期刊参考文献,优秀计算机期刊文章参考文献 优秀计算机专著类参考文献有哪些-免费论文范文...
  12. 制作本地SCLo-scl镜像仓库(reposync下载rpm包、createrepo制作镜像仓库、httpd发布服务)
  13. ICPC训练联盟2021寒假冬令营(5)_2021.01.22_笔记
  14. 面朝大海,春暖花开,有wifi
  15. SpringCloud Config连接私有仓库时的配置(记录一下)
  16. Java基础---继承、抽象、接口
  17. KVM虚拟化技术的-虚拟机配置文件
  18. 使用Kindle4rss推送自己感兴趣的博文
  19. 【Python融于生活】之我想要保存QQ邮箱富途的附件
  20. 使用Java实现发送微信消息(附源码)_此程序在手再也不怕对象跟你闹了

热门文章

  1. OpenCV使用Laplace运算符检测边缘的实例(附完整代码)
  2. Qmake变量variable
  3. C++Runge-Kutta龙格-库塔法求非线性常微分方程的解(附完整源码)
  4. C++中overload,override,overwrite的区别?
  5. 经典C语言程序100例之八六
  6. chmod 文件夹及子文件夹_了解linux文件属性之chgrp,chown,chmod
  7. 打印页面横向怎么设置_条码打印软件标签纸页面设置的方法
  8. 「Swift」笔记第二章 Basic Operators
  9. 1.Slf4j使用log4j的配置参数、配置sl4j/log4j输出到不同的文件、案例
  10. mysql基于.frm和.ibd进行mysql数据恢复