设为主页 | 加入收藏 | 繁體中文

ASP.NET入门随想之代言人

  本报讯 著名品牌办事器控件(Control)携手奥运冠军客户端HTML标签作为形象代言人,新形象以"极速体验"为主题,既解释了办事器控件自己强大的信息处理本领,也表现客户端HTML标签希望用灵动和亲切来证明自己的决心与态度。
  ■ 内与外 - property与attribute
  克日Google发布除英文外的唯一称号--谷歌,中国用户一片哗然, 暂且不论这个谷歌是不是比胡弋更合适,但Google想借此阐述产物内在,媚谄中国用户之心路人皆知;本年WEB2.0引有数风投竞折腰,40亿美金撒向大陆都是钱,于是网站们如同川剧变脸,摇身一变,换成一张张博客、书签、圈圈的面庞。岑寂思索,在信息过剩,分外是同质化严重的前提下,数据发掘、用户体验成为网站关键,有人戏称三分长相(内容),七分打扮(内容聚集和用户体验)。便是如此,人机交互计划从无关紧要提升到必不行少、Ajax技术变火也就不稀罕了。
  办事器端处理总是WEB使用体系的核心功效,大少数的信息处理在办事器端完成。但要是把全部功效都放在办事器端,让页面带着几百几千字节的ViewState在网络中来回穿梭,那可不是恶心,那是相称的恶心。所以我们必要客户端充任办事器真个代言人,通过实行脚本步伐来分担一些体系功效,让用户更爽,让办事器更轻松。
  ASP.NET通过控件与用户完成交互,但就客户端浏览器而言,它从未听过,也不和控件打交道,它所熟悉的是HTML标签和客户端脚本步伐。要让客户端充任办事器真个代言人,就必须让二者交换与相同,即:动态添加客户端举动、动态天生客户端脚本、控件举动与客户端举动映射等。
  attribute和property是一对有趣的近义词,MSDN中有这么一句话:"在 ASP.NET 办事器控件的标记中,可以利用属性 (attribute) 来设置属性 (property) 值。"属性设置属性?头晕眼花中。简单地理解,property是类的成员,attribute是类的表面。前者是品牌本身特性,后者为代言人特性,前者可以通事后者来展现自己。反应到控件与对应HTML标签,控件状态是property,标签中对应的字符串是attribute,即浏览器所看到的办事器端控件的形状。
  ■ 宣布 - 添加客户端举动
  HTTP相应流便是一串字符流,页面天生一个HtmlTextWriter实例,专门网络控件们天生的HTML标记文本,它按控件树的次序,让控件的RenderControl方法查抄自己的Visible属性,要是为真就挪用控件的Render方法向实例添加标记文本,搞定后挪用RenderChildren方法向下递归传递。所以在页面挪用控件Render方法之时或之前,可以在动态地修改标签中的Attribute以组装成相应的标记文本。
  向控件添加客户端举动,最简单的方法是在.apsx文件中的标签间接声明对应的Attribute,或以编程方式挪用控件Attributes 集合的Add方法,即向客户端浏览器宣布:我的代言人是老徐~~
  <%@ Page Language="C#" %>
  <script runat="server">
  protected void Page_Load(object sender, EventArgs e){
  // 为btnTest控件添加onmouseover和onmouseout客户端举动
  btnTest.Attributes.Add("onmouseover","MakeRed();");
  btnTest.Attributes.Add("onmouseout","RestoreColor();");
  }
  </script>
  <html><head runat="server">
  <script language="javascript">
  var previousColor;
  // 转变前景致
  function MakeRed(){
  previousColor = window.event.srcElement.style.color;
  window.event.srcElement.style.color = "#FF0000";
  }
  // 恢复原前景致
  function RestoreColor(){
  window.event.srcElement.style.color = previousColor;
  }
  </script>
  </head>
  <body>
  <form id="form1" runat="server">
  <asp:button id="btnTest" text="btnTest" runat="server" />
  </form>
  </body></html>
  --------------------------------------------------------------------------------
  ■ 注入 - 动态添加客户端脚本
  除了间接在.aspx文件中显式声明外,Page类还提供了一些方法用于动态创立客户端脚本。所谓的动态天生脚本,现实上便是天生对应的脚本字符串,然后利用Page类提供的RegisterClientScriptBlock 、RegisterOnSubmitStatement等方法注入到HtmlTextWriter实例中合适的位置,同时,ASP.NET还提供若干方法用于辅助天生脚本,无非便是加点隐藏输入域、数组之类的东西。
  控件也可以在OnPreRender方法挪用这些方法关照页面添加所需脚本字符串。之所以不在Render方法中实现,是由于HtmlTextWriter实例在被传递到控件手上时,Page类已经完成在HtmlTextWrite实例中天生对应文本,慢了一步。下例为页面回发添加一个确定对话框。
  <%@ Page Language="C#" %>
  <script runat="server">
  protected void Page_Load(Object sender, EventArgs e){
  String scriptText = "return confirm('要提交吗?')";
  //添加页面提交时实行的脚本。 RegisterOnSubmitStatement("ConfirmSubmit", scriptText);
  }
  </script>
  <html><head></head><body>
  <form id="form1" runat="server">
  <asp:button id=btnTest text=PostBack runat="server" />
  </form></body></html>
  ■ 携手 - GetPostBackEventReference方法
  许多时间我们希望客户端举动能够和相应的办事端举动携起手来,配合完成一个完备的体系功效,即客户端举动能够触发相应的办事器端举动,即两者映射。在ASP.NET1.1中,素质上是把页面为原子回发单元,客户端举动只能在页面回发之前向隐藏标记域里写入带有本身特性的数据,页面回发后,控件们通过查抄隐藏标记域的数据来触发相应的举动。
  客户端与办事端携手典型例子有两个:一是GetPostBackEventReference方法,它可以引发带有特性数据的页面回传;一是大名鼎鼎的验证器构架,除此之外,尺度控件也有若干是通过客户端举动来实现。上面我们曩昔者为例,演示完备的"天生-客户端处理-回发-办事端处理"过程。
  public class MyControl : Control, IPostBackEventHandler{
  //界说Number属性
  public int Number{
  get{
  if ( ViewState["Number"] !=null )
  return (int) ViewState["Number"];
  else
  return 50;
  }
  set { ViewState["Number"] = value; }
  }
  //依赖于用户操作的事件处理,请参考《随想十一》
  // eventArgument为事件数据,这里由GetPostBackEventReference设置
  public void RaisePostBackEvent(string eventArgument){
  if ( eventArgument == "inc" ) Number ++;
  if ( eventArgument == "dec" ) Number --;
  }
  //天生控件对应的HTML标记文本
  //除天生Number属性文本外,还天生两个引发回发并带着回发事件参数的超链接
  // GetPostBackEventReference 方法收回启动回发的客户端脚本,并提供引用
  protected override void Render(HtmlTextWriter writer){
  writer.Write("控件值:" + Number.ToString() + " " );
  writer.Write("<a href=\"javascript:" + Page.GetPostBackEventReference(this,"inc") + "\">+</a>");
  writer.Write(" or ");
  writer.Write("<a href=\"javascript:" + Page.GetPostBackEventReference(this,"dec") + "\">-</a>");
  }
  }
  由于ASP.NET1.1是以页面为原子回发单元,代言人与品牌之间的相同和接洽要支付宏大的性能代价。要改善只能冲破以页面作为原子回发单元的制度。
 


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: