zoukankan      html  css  js  c++  java
  • 后台动态设置前台标签内容和属性

    和以前的asp不同,在asp.net中为了彻底的代码分离,我们一般不采用<%=%>嵌入标签中来设置一些属性和内容。
    一般来说有2种情况:
    (一)设置标签的内容,比如<title>这里</title>
    (二)设置标签的属性,比如<body bgcolor=这里>
    (三)动态加载一些script
    先看一下(一)和(二):
    前台
    <title id="mytitle" runat="server"></title>
    <body id="mybody" runat="server">
    后台
    protected HtmlGenericControl mytitle;
    protected HtmlGenericControl mybody;
    this.mytitle.InnerText="test";
    this.mybody.Attributes["bgcolor"]="#cccccc";
    这里说明3点:
    (1)前台标签runat=server是必须的
    (2)HtmlGenericControl的命名空间是System.Web.UI.HtmlControls
    (3).InnerText和.InnerHtml是有区别的
    比如:
    前台
    <span runat="server" id="myspan"></span>
    后台
    this.myspan.InnerText="<b>test</b>"
    得到的结果是
    <span id="myspan">&lt;b&gt;test&lt;/b&gt;</span>
    把后台改为
    this.myspan.InnerHtml="<b>test</b>"
    得到的结果是
    <span id="myspan"><b>test</b></span>
    再来看看动态加载一些script
    一般来说有三种情况
    (1)在前台放置<asp:Literal Runat="server"></asp:Literal>指定位置输出
    (2)后台通过RegisterStartupScript和RegisterClientScriptBlock输出
    (3)Response.Write输出
    举例如下
    (1)
    前台
    <asp:Literal ID="myLiteral" Runat="server"></asp:Literal>
    后台
    this.myLiteral.Text+="<script>alert('test');</script>";
    查看源代码可以看到原来的
    <asp:Literal ID="myLiteral" Runat="server"></asp:Literal>
    位置变成了
    <script>alert('test');</script>
    (2)
    为了更加清楚看到两个的区别,前台如下
    <form id="Form1" method="post" runat="server">
    <input type="hidden" value="test" id="myhiden">
    </form>
    后台如下
    Page.RegisterStartupScript("","<script>alert('RegisterStartupScript:'+document.all.myhiden.value)</script>");
    Page.RegisterClientScriptBlock("","<script>alert('RegisterClientScriptBlock:'+document.all.myhiden.value)</script>");
    结果如下:只出现对话框显示RegisterStartupScript:test
    查看源代码如下:
    <form name="Form1" method="post" action="WebForm4.aspx" id="Form1">
    <input type="hidden" name="__VIEWSTATE" value="dDwtNjU0MzcyMTk1Ozs+NmbLf6dWkF/Q/FLKKsdPPfhFXr0=" />
    <script>alert('RegisterClientScriptBlock:'+document.all.myhiden.value)</script>
    <input type="hidden" value="test" id="myhiden">
    <script>alert('RegisterStartupScript:'+document.all.myhiden.value)</script>
    </form>
    两者区别不用多说了吧
    (3)
    我们再加一句Response.Write("test")
    查看源代码发现test字样出现在最前面
    test
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    用它来输出转向代码比较合适
    <script>location.href='page.aspx'</script>

    最后在提醒一下大家,有很多人在给一个控件加js代码的时候会这么写:
    this.mybody.Attributes["onclick"]="<script>alert('test');</script>";
    这么写是不对的
    应该是
    this.mybody.Attributes["onclick"]="alert('test');";
    比如你在前台书写<a onclick=>的时候你会写<a onclick='<script>alert('test')<script>'>吗?
    道理是一样的!
    但是相反,有的人在
    Page.RegisterStartupScript("","<script>alert('test');</script>");的时候不写里面的<script>也是不行的
    (虽然名字叫Register...Script) 

    IsClientScriptBlockRegistered是为了验证该脚本是否注册过,如注册过则不再注册,防止重复注册

  • 相关阅读:
    fullCalendar改造计划之带农历节气节假日的万年历(转)
    Linked List Cycle
    Remove Nth Node From End of List
    Binary Tree Inorder Traversal
    Unique Binary Search Trees
    Binary Tree Level Order Traversal
    Binary Tree Level Order Traversal II
    Plus One
    Remove Duplicates from Sorted List
    Merge Two Sorted Lists
  • 原文地址:https://www.cnblogs.com/zhuor/p/366777.html
Copyright © 2011-2022 走看看