- 浏览: 244080 次
- 性别:
- 来自: 葡萄牙
文章分类
最新评论
-
lightbulb:
...
jQuery中的动画与效果 -
kendezhu:
opportunity 写道 谢谢kendezhu分享,今天正 ...
jQuery 获取和设置select下拉框的值 -
opportunity:
谢谢kendezhu分享,今天正好用上了!
jQuery 获取和设置select下拉框的值
1.关于页面的内置对象(现在先大体讲一下这些ASP.NET内置对象的本质及研究方法,关于它们的使用请看5)
以前只知道在cs里可以直接用什么Session啦Response啦Request啦Server啦Cache啦Application啦等等这些在ASP时代就已经知道的所谓的内置对象,从来没有想过这些内置对象到底是什么,直到最近在J2EE里用到了Session时却要先实例化一个Session对象才能用:HttpSession mysession=request.getSession(); 我就想为什么在ASP.NET里可以直接用呢?原来Session等在ASP.NET中被称为"内置对象",那么何为内置对象呢?其实也是类的实例,只不过这些对象的实例化比较特殊,是通过Page类的属性来实例化的(我们可以敲出Page类然后转到定义,会发现其有很多属性名就是我们的这些内置对象的名字,这些属性的get方法将实例化并返回一个这些内置对象所属类型的实例,而这个实例的引用名与内置对象名相同),这样我们在我们自己的页面里就可以直接敲出属性名(别忘了我们的页面是继承自Page类,当然可以这样做)就可以得到那些内置对象了。按照这样的逻辑只要我们知道这些内置对象所属的类型,就可以在我们页面中通过new的方式实例化这些内置对象了,我们还是以Session为例(Session.Timeout设置获取Session的过期时间默认是20分钟,Session.SessionID获取Session的唯一标识):我们敲出Session时会通过智能提示会发现内置对象Session所属类型是System.Web.SessionState命名空间里的HttpSessionState类(按照这样看来Page类所在的命名空间一定引入了System.Web.SessionState命名空间,于是敲出Page类然后转到定义,发现果然引入了System.Web.SessionState命名空间),于是就在我自己的页面也引入了System.Web.SessionState命名空间,然后用new的方式实例化了一个Session对象: HttpSessionState mysession = new HttpSessionState();然后编译...出错(System.Web.SessionState.HttpSessionState类型未定义构造函数无法实例化),于是又转到HttpSessionState的定义,发现确实没有构造函数(不过HttpSessionState类连空构造函数都没有吗?那Page类里的Session里的get方法是怎样实例化HttpSessionState类的?补:最近通过Reflector工具发现在Page类的属性里这些内置对象是通过Context对象的属性实例化的(还有种说法是这些对象是在ASP.NET页面初始化请求时自动创建的,而无需对类进行实例化操作),Context本身也是一种内置对象,其类型是HttpContext,在下面有讲解)有类似情况的还有Application,Server等,而Request和Response等虽然有构造函数,但其构造函数的参数要求都非常苛刻。那么我们只能用敲出属性名(这些内置对象的引用)的方法来获得这些内置对象的实例吗?而在J2EE中可以通过request.getSession()的方式实例化出许多HttpSession类的实例(不过个人感觉也没必要,呵呵),在JSP里可以使用Servlet中实例化的HttpSession类的引用,也可以实例化HttpSession类(但其引用不能和Servlet中相同)而Servlet中实例化的HttpSession类的引用可以相同,如在两个Servlet中都实例化了HttpSession类且引用相同,那么修改了其中一个对象也会修改另一个对象(到了这,感觉就和ASP.NET中的Session对象不同啊,每敲出Session属性就相当于实例化一个HttpSessionState类(通过Reflector工具可以看出该类实现了ICollection和IEnumerable接口,所以其是一个集合类),而该实例的引用就是Session是一个集合的引用,所以我们可以在同一个Session里添加很多键值对)。另外我们也可以在自己的页面内敲出Page属性,通过智能提示我们可以看出Page属性是所有控件的祖先Control类(到其定义中会看到很多控件的"根属性"如ID,ClientID,UniqueID等还有我们常用的FindControl方法,返回其内部控件集合的属性Controls等)的属性,通过该属性也会返回一个Page类的实例,引用名也是Page,所以根据我们前面的分析,Page也是一种内置对象。之所以我们可以敲出Page属性是因为我们的页面继承自Page类而Page类又从Control类继承,所以其实页面也是一种控件。通过Page属性得到的是Page类的实例,而通过this关键字得到的是当前页面类的实例,所以this包含的东西>=Page包含的东西。
2.之所以写1是因为在http://kendezhu.iteye.com/blog/745538里用到了Context这个内置对象,当时是通过httpcontext.current获得的这个内置对象,那么现在让我们来简单看一下Context(http上下文类HttpContext的实例):
http://msdn.microsoft.com/zh-cn/library/system.web.httpcontext(v=VS.80).aspx
1.Context.Handler(获得"传送页"的实例的引用(而且是传送页的aspx页面类的实例引用:http://kendezhu.iteye.com/blog/788770),类似于http://kendezhu.iteye.com/blog/748769的17补)(注意:Context.Handler只能通过在"传送页"使用Server.Transfer("接收页"),才能在接收页得到传送页的实例引用,而PreviousPage既能Server.Transfer("接收页")又能PostBackUrl)
http://www.cnblogs.com/suchenge/articles/1530142.html
传送页 D.aspx cs:
public partial class D : System.Web.UI.Page
{
private string s = "我来自D";
public string S
{
get { return s; }
set { s = value; }
}
protected void Button1_Click(object sender, EventArgs e)
{
Server.Transfer("C.aspx");
}
}
接收页 C.aspx cs:
public partial class C : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
关于is和as:http://blog.csdn.net/kendezhu/archive/2009/12/07/4959312.aspx
Context.Handler的方式只能用Server.Transfer()
if (Context.Handler is D)
{
要知道Context.Handler实质上就是ASP.D_aspx类,其继承自D(http://kendezhu.iteye.com/blog/788770)所以能够进行强制转换
D d = (D)Context.Handler;
Label1.Text = ((TextBox)d.FindControl("TextBox1")).Text + d.S;
}
}
}
如果有多个传送页,比如还有一个B.aspx,可以在接收页里根据不同的传输页进行不同的操作(这里用is判断是可以的,因为不同的页面是不能强制转换的,基类页与派生页是可以进行强制转换的,也就是is将返回true),而对于PreviousPage也可以在接收页里根据不同的传输页进行不同的操作:
context.handler接收页:
public partial class C : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Context.Handler is B)
{
B b = (B)Context.Handler;
Label1.Text = ((TextBox)b.FindControl("TextBox1")).Text + b.S;
}
if (Context.Handler is D)
{
D d = (D)Context.Handler;
Label1.Text = ((Label)d.FindControl("Label1")).Text;
}
}
}
PreviousPage接收页:
public partial class G : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
PreviousPage的方式可以用Server.Transfer(),也可以用PostBackUrl
if (PreviousPage is E)
{
要知道Previous实质上就是ASP.E_aspx类,其继承自E(http://kendezhu.iteye.com/blog/788770)所以能够进行强制转换
Label1.Text = ((TextBox)PreviousPage.FindControl("TextBox1")).Text + ((E)PreviousPage).S;
}
if (PreviousPage is F)
{
Label1.Text =((Label)PreviousPage.FindControl("Label1")).Text;
}
}
}
2.Context.RewritePath
http://www.cnblogs.com/zhchongyao/archive/2009/10/21.html
单独写貌似没有用:Context.RewritePath("Rewirtepath.aspx?w=23");
这样写:
Context.RewritePath("Rewirtepath.aspx?w=23");
Server.Transfer("Rewirtepath.aspx);
效果上等于:Server.Transfer("Rewirtepath.aspx?w=23");
3.Context.Items(可以起到页面间传值的作用)
http://www.cnblogs.com/barney/archive/2008/07/19/1246626.html
比Session功能要弱一些(主要体现在Context.Items在做转页时必须用Server.Transfer,否则在接收页得不到值):
public class Class1
{
public string name;
public int age;
}
传送页 cs:
protected void Page_Load(object sender, EventArgs e)
{
Class1 c = new Class1();
c.name = "小刘";
c.age = 20;
Context.Items["person"] = c;
Server.Transfer("接收页");
//Response.Redirect("接收页"); 用Session的话是可以的
}
接收页 cs:
protected void Page_Load(object sender, EventArgs e)
{
if (Context.Items["person"] != null)
{
关于is和as:http://blog.csdn.net/kendezhu/archive/2009/12/07/4959312.aspx
Class1 c = Context.Items["person"] as Class1;
也可直接粗鲁地强制转换 Class1 c =(Class1)Context.Items["person"];
Label1.Text = c.name + " " + c.age.ToString();
}
}
值得一提的是也有Items这种内置对象,但却实现不了这种效果,必须要写Context.Items["*"]才可以。
3.动态添加控件:http://www.cnblogs.com/ringwang/archive/2008/05/07/1187213.html
http://www.cnblogs.com/lovecherry/archive/2005/04/16/138968.html
http://www.cnblogs.com/chenxizhang/archive/2009/05/19/1460544.html
http://www.cnblogs.com/blusehuang/archive/2007/04/26/728079.html(动态添加控件ID一定要不同)
http://kendezhu.iteye.com/admin/blogs/690772
这种添加的自然是各种服务器端控件了,样式设置可以直接在生成控件时设置也可以后来通过CSS来设置,不过关于定位问题,最好将生成的控件添加在容器控件里(如Panel,Table等),这样我们只要给这些容器控件定位就可以了。
关于网上很多人说在回发后这些控件不见了,原因可能有两点1.写在Page_Load()里面的!IsPostBack(只有第一次请求才进行)里了(IsPostBack自然是第一次不进行,回发时才进行)2.写在控件事件里了(回发后你没有触发该事件自然不会处理了)
还有一点很重要,在动态添加控件时要注意控件的ID一定要不同,因为服务器端与浏览器端对控件的状态(包括最重要的控件的属性值)的来回交流靠的就是viewstate(可禁)和控件状态(不可禁),而viewstate和控件状态就是根据不同控件ID及其不同属性等来分发数据的。当然只有服务器的控件的状态可以在回发后被保存(一个TextBox一个<input type="text">都被设值,回发后TextBox的值还会在),不过客户端控件也有办法:http://www.cnblogs.com/Randy0528/archive/2007/01/07/614368.html (保存客户端控件的状态的方法(以textarea为例))
关于ViewState和控件状态:http://book.51cto.com/art/200902/109016.htm
http://www.cnblogs.com/chenxizhang/archive/2009/04/02/1427827.html
http://kendezhu.iteye.com/admin/blogs/752240里的补
还可以直接用Response.Wirte(客户端控件)直接往页面上输出,然后用CSS设置样式(当然这种仅限客户端控件,而且定位也要靠CSS,当然对于样式和定位的设置你也可以写在Response.Wirte里,但这样会使代码看起来很乱)
4.一个页面使用多个表单分别提交到不同的页面
<body>
<form id="form1" runat="server" style="border:solid 1px yellow; margin-bottom:3px;">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<input type="text" name="username" />
<asp:Button ID="Button1" runat="server" Text="表单1" PostBackUrl="B.aspx" />
</form>
<form id="form2" action="C.aspx" style="border:solid 1px yellow;" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" name="tijiao" value="表单2"/>
</form>
</body>
值得注意的是ASP.NET中一个页面中只能有一个表单有runat="server",其他表单由于没有runat="server"所以将不能使用大部分服务器端控件。 这里B.aspx只能得到form1中的值 C.aspx只能得到form2中的值。
5.ASP.NET一些常用内置对象的使用
用来存储信息(一般都是集合类型的内置对象):Session(HttpSessionState) Application(HttpApplicationState) Cache(Cache) 更多请参考这里及Cookies的使用
6.数据库的每一张表中只能有一个标识字段。
7.将指定字符串按指定长度进行剪切
<param name= "oldStr "> 需要截断的字符串 </param>
<param name= "maxLength "> 字符串的最大长度 </param>
<param name= "endWith "> 超过长度的后缀 </param>
<returns> 如果超过长度,返回截断后的新字符串加上后缀,否则,返回原字符串 </returns>
public static string StringTruncat(string oldStr, int maxLength, string endWith)
{
if (string.IsNullOrEmpty(oldStr))
// throw new NullReferenceException( "原字符串不能为空 ");
return oldStr + endWith;
if (maxLength < 1)
throw new Exception("返回的字符串长度必须大于[0] ");
if (oldStr.Length > maxLength)
{
string strTmp = oldStr.Substring(0, maxLength);
if (string.IsNullOrEmpty(endWith))
return strTmp;
else
return strTmp + endWith;
}
return oldStr;
}
注意:如果前台绑定时用到此函数<%# StringTruncat(Eval("title").ToString(),30,"...")%>,因为Eval()返回Object
http://qun.51.com/xinchaoliu/topic.php?pid=456
8.CSS 伪类与伪对象 具体参考CSS手册
10. JavaScript内置函数和JavaScript 对象 ② ③(本地对象,就是那些官方定义好了的类的对象。内置对象是本地对象的一种,其只包含Global对象和Math对象等。而宿主对象则是那些官方未定义,你自己构建的对象加上DOM和BOM对象组成的。 )
要使用相应的JavaScript对象才能使用相应的JavaScript内置函数。具体参考JavaScript参考手册
11.图片放大镜效果
CSS:
<style type="text/css">
#smallImgCon {position:relative;left:0;top:0;}
#magnifierCon {height:276px;width:276px;position:absolute;overflow:hidden;z-index:3}
#magnifierCon img#magnifierBg {position:absolute;z-index:2}
#magnifierCon img#largeImg {position:absolute;z-index:1}
</style>
HTML:
<div onmousemove="imgZoomOut(event)" id="smallImgCon"> <img alt="" src="images/smallimg.jpg" id="smallImg"/> <div id="magnifierCon" style="display:none"> <img alt="" src="images/magnifier.png" id="magnifierBg"/> <img alt="" src="images/largeimg.jpg" id="largeImg"/> </div> </div>
JavaScript:
<script type="text/javascript"> var smallImgCon = document.getElementById("smallImgCon"); var smallImg = document.getElementById("smallImg"); var magnifierCon = document.getElementById("magnifierCon"); var magnifierBg = document.getElementById("magnifierBg"); var largeImg = document.getElementById("largeImg"); function getImageSize(imageEl) { var i = new Image(); i.src = imageEl.src; return new Array(i.width, i.height); } function imgZoomOut(event) { magnifierCon.style.display = "block"; smallImgConLocationX = smallImgCon.offsetLeft;//得到小图片X坐标 smallImgConLocationY = smallImgCon.offsetTop;//得到小图片Y坐标 x = event.clientX - smallImgConLocationX;//光标相对小图片左上角X坐标 y = event.clientY - smallImgConLocationY;//光标相对小图片左上角Y坐标 var smallSize = getImageSize(smallImg); smallImgWidth = smallSize[0]; smallImgHeight = smallSize[1]; var largeSize = getImageSize(largeImg); largeImgWidth = largeSize[0]; largeImgHeight = largeSize[1]; var magnifierSize = getImageSize(magnifierBg); magnifierWidth = magnifierSize[0]; magnifierHeight = magnifierSize[1]; if ( x < 0 || x > smallImgWidth || y < 0 || y > smallImgHeight) { dispear(); }else { magnifierCon.style.left = x - magnifierWidth/2 + "px";//放大镜X坐标 magnifierCon.style.top = y - magnifierHeight/2 + "px";//放大镜Y坐标 x = - x*(largeImgWidth/smallImgWidth) + magnifierWidth/2; y = - y*(largeImgWidth/smallImgWidth) + magnifierHeight/2; largeImg.style.left = x + "px"; largeImg.style.top = y + "px"; } } function dispear() { magnifierCon.style.display = "none"; } </script>
发表评论
-
小知识十三
2013-12-04 12:09 6931. Combres js css压缩 及引发的VS功能使 ... -
小知识(十二)
2012-11-02 14:11 11061.jQuery的replaceWith方法 可用 ... -
小知识(十一)
2012-06-16 10:15 21431 .有时为防止SQL注入需要过滤字符,如对Requ ... -
小知识(十)
2012-05-23 17:58 18551.virtual(虚方法)+override(重写) 与 n ... -
小知识(九)
2011-12-28 14:28 9511.手动HTML构建table其中有分级列 分级列类似于一棵 ... -
小知识(八)
2011-11-23 12:00 8191.jQuery DatatableToJson http: ... -
小知识(七)
2011-09-19 17:54 17111.TreeView SelectedNodeChanged事 ... -
小知识(六)
2011-08-11 17:03 10191.嵌套的的Repeater 有时候需要使用到嵌套的Repe ... -
小知识(五)
2011-03-29 17:41 10201.在需要弹出提示框时 ... -
小知识(四)
2011-01-31 18:05 12931.使用AspNetPager给数据由数据源控件提供的数 ... -
小知识(三)
2010-12-16 20:22 11311.<a href="*.aspx" ... -
小知识(一)
2010-08-27 12:21 12411.QQ在线服务代码 http:// ...
相关推荐
小学生金融知识普及二PPT教案.pptx
最新知识付费变现小程序源码,独立后台知识付费小程序源码,最新版修复登录接口。 主要功能 会员系统,用户登录/注册购买记录 收藏记录 基本设置 后台控制导航颜色 字体颜色 标题等设置 流量主广告开关小程序广告...
知识付费变现小程序源码独立后台版本是一款专为内容创作者、教育机构或企业提供的一款高效、便捷的在线变现工具。它允许用户通过小程序平台分享知识产品,如课程、文章、音频、视频等,并通过内置的支付系统实现收费...
知识付费小程序源码是当前数字化时代中一个热门的开发领域,尤其对于教育、咨询和内容创作者来说,这种技术能够帮助他们有效地实现知识变现。本文将深入探讨知识付费小程序的源码,包括其基本架构、主要功能、开发...
小学生金融知识普及二PPT学习教案.pptx
知识付费平台小程序源码是一个专为在线教育、知识分享、技能传授等领域设计的软件开发工具。这个源码允许开发者或企业构建自己的知识付费小程序,让用户能够便捷地在微信、支付宝等平台上购买、学习各类课程或者内容...
【二级计算机基础知识】是针对计算机二级考试中的公共理论部分进行的详细介绍。这部分内容涵盖了数据结构与算法、程序设计基础等多个核心领域,旨在帮助考生扎实掌握计算机科学的基础理论,以顺利通过考试。 在第一...
知识付费在线课程小程序开源版V7.1.2是一款专为教育和培训行业设计的微信小程序应用,旨在帮助教育机构和个人讲师将课程内容转化为可销售的数字产品,从而实现知识的商业化。这款开源版本提供了完整的源码,允许...
知识付费小程序源码是当前数字化时代中一个热门的开发领域,尤其对于内容创作者、教育机构以及知识服务提供商来说,它提供了便捷的平台,使他们能够将专业知识转化为经济收益。源码是程序的基础,掌握源码意味着可以...
"知识付费阅读店铺小程序源码"是开发者为实现在线知识付费阅读业务而编写的代码集合,允许用户在微信内直接访问并消费各类知识内容,如电子书、课程、文章等。 此压缩包文件"知识付费阅读店铺小程序 ypuk_ffyd ...
《二十四节气知识与问答》小程序是一款以中国传统文化为背景,深入浅出地介绍和探讨二十四节气的应用和内涵的互动平台。它旨在通过轻松愉快的方式,帮助用户了解这一独特的天文历法体系,同时增强对中国传统文化的...
知识点二:知识图谱技术 * 小i机器人在知识图谱技术方面的研究和应用,旨在构建一个庞大的知识库,以便更好地理解和处理中文语义信息。 * 知识图谱技术是人工智能领域中的一个重要技术,涉及到知识表示、知识推理和...
知识付费小程序源码是开发一款基于微信平台的小程序应用的核心代码集合,允许开发者根据特定需求进行定制和二次开发。此源码的分享旨在为开发者提供一个基础框架,用于创建自己的知识付费服务,实现虚拟资源的变现。...
第二部分则可能涉及小程序前端页面的创建、数据绑定、事件处理等。通过这两部分的学习,你应该能够独立完成一个基本的知识付费小程序项目。 总的来说,这个资源包是学习和实践知识付费小程序开发的理想起点,无论你...
每页广告单独设置,高频率的插屏广告(收入超过激励视频),用户观看激励广告,用户解锁观看激励广告,只要你有定位精准的初始量,这个小程序的邀请解锁模式,会为你带来二次流量裂变,只要你的资源有价值,三次裂变...
基本设置 后台控制导航颜色 字体颜色 标题等设置 流量主广告开关小程序广告显示...签到签到互动二奖励 分类 资源分类 友情连接 跳转小程序 盈利能力:激励视频广告+插屏广告+视频广告+横幅广告+格子广告 =收益神器
二年级语文上册第二单元知识小结.pdf
计算机是我们的小伙伴计算机基础知识普及 一、认识我们的新朋友——电脑 二、计算机的用途 三、计算机的基本操作 四、计算..
微信知识付费小程序,知识付费系统,博客源码(带300条数据) 小程序不做了分享出来 后台地址:你的域名/Zhis 账号:admin 密码:zxcvbnm123 数据库用n++打开全局搜索caiji.ymku.vip 全部替换为你现在的域名 public/...