科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件ASP.NET入门随想之代言人

ASP.NET入门随想之代言人

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

近日Google发布除英文外的唯一名称--谷歌,中国用户一片哗然, 暂且不论这个谷歌是不是比胡弋更合适

作者:老燕 来源:天极开发 2007年11月6日

关键字: Windows

  • 评论
  • 分享微博
  • 分享邮件
 ■ 注入 - 动态添加客户端脚本

  除了直接在.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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章