后台动态设置前台标签内容和属性

    技术2022-05-11  96

    和以前的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"><b>test</b></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 οnclick=>的时候你会写<a οnclick='<script>alert('test')<script>'>吗? 道理是一样的! 但是相反,有的人在 Page.RegisterStartupScript("","<script>alert('test');</script>");的时候不写里面的<script>也是不行的 (虽然名字叫Register...Script)  

    最新回复(0)