操纵自如--页面内的配合与通信
.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中调用就行了。
public void setSelect(string _value)
{
lblMessage.Text = _value;
}
在aspx中直接调用它
{
WebUserControl3_1.setSelect(txtValue.Text);// WebUserControl3_1是用户控件的ID
}
可能大家看得不是很明白,不过总之,在aspx中可以调用ascx中的公共方法,传入想传的参数,就OK了。
如果倒过来,由B->A。
在ascx中改变aspx中的一个Label,也只换种方式
lblMessage.Text = txtValue.Text;
也就是说,可以在ascx中查找当前aspx页的控件ID,找到了,直接赋个值就行了。反正,只要找到这个控件,用起来就好像自己的一样。
2、master与aspx的通信
在master中访问aspx中的东西也是查找控件,和ascx中查找aspx中差不多
lblMessage.Text = txtValue.Text;
倒过来,aspx可以调用masterpage的公共方法
master.setValue(txtValue.Text);//调用masterpage的方法
3、master中的ascx 与 master中的aspx通信
从master中的ascx到master中的aspx,需要通过master,查找ContentPlaceHolder,再查找Label
Label _lblMessage = (Label)master.FindControl("ContentPlaceHolder1").FindControl("lblMessage");
_lblMessage.Text = txtValue.Text;
aspx要想与masterpage的ascx联系,要先得到master,再查找ascx,再查找Label。
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
内容:
{
void setSelect(string value);
}
在WebUserControl1.ascx继承该接口,并实现其方法。
{
public void setSelect(string _value)
{
lblMessage.Text = _value;
}
}
然后直接在webUserControl2.ascx调用webUserControl1.ascx中的方法
userControl1.setSelect(txtValue.Text);//setSelect是webUserControl1.ascx中的方法,调用它。
这实际上是很好的一种方法,这样来做,其它类型的控件间通信应该都能实现,在那几天,我还一直沾沾自喜着呢。通过这一样一个例子,也发现接口确实不简单,真的是一个“接口”。
.net的partial类的引入使用我的可以在各个文件中实现一个,最后合并在一起,而通过这些小技巧,又可以把各部分联系起来,成为一个真正的“整体”。
操纵自如--页面内的配合与通信相关推荐
- js 跳转到指定位置 高德地图_在H5页面内通过地址调起高德地图实现导航
项目中用到的一个功能是要通过点击地址来实现打开地图app实现地址导航. 如下图: 实现思路就是在H5页面内通过点击marker图标然后进行当前位置与页面上地址的路程规划与导航. 由于项目中用到的是高德 ...
- php js统计链接点击次数,JS实现在线统计一个页面内鼠标点击次数的方法
本文实例讲述了JS实现在线统计一个页面内鼠标点击次数的方法.分享给大家供大家参考.具体实现方法如下: js记录鼠标的点击次数 function addCookie(name,cookievalue,t ...
- 网站页面内链如何布局才更有利于SEO?
在网站优化中,网站内链所发挥的作用不言而喻.合理布局的内链不仅方便用户浏览,还更加吸引搜索引擎蜘蛛对网站的爬行和抓取,从而更高效的提升用户体验以及网站权重,对网站的收录量提升也有积极的作用,那么网站页 ...
- python爬虫如何从一个页面进入另一个页面-Python爬虫如何获取页面内所有URL链接?本文详解...
如何获取一个页面内所有URL链接?在Python中可以使用urllib对网页进行爬取,然后利用Beautiful Soup对爬取的页面进行解析,提取出所有的URL. 什么是Beautiful Soup ...
- html怎样同框架页面内跳转,使用iframe框架时,实现子页面内跳转到整个页面,而不是在子页面内跳转...
首先先来描述一下我所遇到的问题,我在一个首页的index.jsp页面中用到了iframe框架,见下图 在iframe中引入jsp页面的路径,是几个iframe框架组合成的一个完整的页面,但是他们的存在 ...
- android页面跳转时获取地址栏,Android 利用scheme页面内跳转协议进行跳转
什么是 URL Scheme? android中的scheme是一种页面内跳转协议. 通过定义自己的scheme协议,可以非常方便跳转app中的各个页面: 通过scheme协议,服务器可以定制化告诉A ...
- python爬虫获取url_Python爬虫如何获取页面内所有URL链接?本文详解
如何获取一个页面内所有URL链接?在Python中可以使用urllib对网页进行爬取,然后利用Beautiful Soup对爬取的页面进行解析,提取出所有的URL. 什么是Beautiful Soup ...
- vue 页面不置顶问题(页面内操作、页面跳转后) - 集合篇
文章目录 vue 页面内切换dom,页面跳转后 都不置顶? 一.页面内操作: 1.1 代码如下: 二.页面之间跳转: 2.1 代码截图 · 说明: 2.2 增加代码 · 示下: 三.拓展 · (直接置 ...
- 微信H5页面内实现一键关注公众号
H5页面内实现关注公众号的微信JSSDK没有相关接口开放,因此就得动点脑筋来实现该功能了.下面的方法就是通过一种非常蹊跷的方式实现的. 首先,需要在公众号内发表一篇原创文章,注意是原创文章,然后由另一 ...
最新文章
- rsync - 远程同步工具
- Spring @Scheduled关键字
- WindowsLinux常用命令笔记
- svg笔记----------path篇
- php 時間比較,PHP用strtotime()函數比較兩個時間的大小實例詳解
- python移除字符串中指定元素_Python – 从作为另一个元素的子串的字符串列表中删除任何元素...
- tensorflow入门笔记(一)
- pythonsqlite导出json_使用python将mysql数据库的数据转换为json数据
- 计算机分区无法删除,电脑硬盘分区无法修改的解决方法分析
- MATLAB分集接收技术仿真,分集接收技术.doc
- 计算机专业期刊参考文献,优秀计算机期刊文章参考文献 优秀计算机专著类参考文献有哪些-免费论文范文...
- 制作本地SCLo-scl镜像仓库(reposync下载rpm包、createrepo制作镜像仓库、httpd发布服务)
- ICPC训练联盟2021寒假冬令营(5)_2021.01.22_笔记
- 面朝大海,春暖花开,有wifi
- SpringCloud Config连接私有仓库时的配置(记录一下)
- Java基础---继承、抽象、接口
- KVM虚拟化技术的-虚拟机配置文件
- 使用Kindle4rss推送自己感兴趣的博文
- 【Python融于生活】之我想要保存QQ邮箱富途的附件
- 使用Java实现发送微信消息(附源码)_此程序在手再也不怕对象跟你闹了
热门文章
- OpenCV使用Laplace运算符检测边缘的实例(附完整代码)
- Qmake变量variable
- C++Runge-Kutta龙格-库塔法求非线性常微分方程的解(附完整源码)
- C++中overload,override,overwrite的区别?
- 经典C语言程序100例之八六
- chmod 文件夹及子文件夹_了解linux文件属性之chgrp,chown,chmod
- 打印页面横向怎么设置_条码打印软件标签纸页面设置的方法
- 「Swift」笔记第二章 Basic Operators
- 1.Slf4j使用log4j的配置参数、配置sl4j/log4j输出到不同的文件、案例
- mysql基于.frm和.ibd进行mysql数据恢复