页面显示的文字被显示在<html>和</html>之外,这不符合XHTML标准。这对于普通页面来说也许并无大碍,但是如果在频繁输出javascript脚本的网页中,可能会对网页的客户端执行效果产生影响。因为javascript脚本块在客户端调用方法之前还是客户端调用方法之后效果可能会不一样。
新建一个aspx文件,名为Home,在Page_Load事件中添加代码,如下:
输出javascript
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Response.Write("<script lauguage="javasrcipt">alert(""+DateTime.Now.ToString()+"")</script>");
}
}
这样每次运行Home.aspx页面的时候都会弹出一个显示当前时间的对话框。但当查看其源代码时会发现:
查看源码:
<script lauguage="javasrcipt">alert("2010/8/13 23:16:23")</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<form method="post" action="Home.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZPJPFVG/mvEj7wJdj697BaFPCzi8KIMu+OvQgQLstVMC" />
</div>
<div>
</div>
</form>
</body>
</html>
可以看见输出的javascript代码在<html></html>标记之外。
解决办法:
在Page类中有一个ClientScript属性,它是ClientScriptManager的实例,这个类是在asp.net2.0中新增的。
ClientScriptManager有如下几个常用方法:
RegisterClientScriptBlock方法:向 Page 对象注册客户端脚本。
RegisterStartupScript方法:向 Page 对象注册启动脚本。
ClientScriptManager类通过键string和Type来唯一标识脚本。具有相同类型的键和Type的脚本识为同一脚本。
下面对Home窗体的Page_Load事件修改代码如下:
ClientScript两个方法
protected void Page_Load(object sender, EventArgs e)
{
if (!ClientScript.IsClientScriptBlockRegistered(this.GetType(), "ClientScriptBlock"))
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "ClientScriptBlock", "<script lauguage="javascript">alert("ClientScriptBlock")</script>");
}
if(!ClientScript.IsStartupScriptRegistered(this.GetType(),"StartupScript"))
{
ClientScript.RegisterStartupScript(this.GetType(),"StartupScript","<script lauguage="javascript">alert("StartupScript")</script>");
}
}
执行该页面时,会弹出两个提示窗口,生成的HTML代码如下:
ClientScript生成HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<form method="post" action="Home.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZPJPFVG/mvEj7wJdj697BaFPCzi8KIMu+OvQgQLstVMC" />
</div>
<script lauguage="javascript">alert("ClientScriptBlock")</script>
<div>
</div>
<script lauguage="javascript">alert("StartupScript")</script></form>
</body>
</html>
可以看出上面的两个方法输出的javascript脚本都在<form></form>标记之内,不会破环文章的结构,而且RegisterClientScriptBlock方法输出的javascript脚本代码块靠近<form>标记的开始标记,而RegisterStartupScript方法输出的javascript脚本代码块靠近<form>标记的结束标记,了解这一点对于控制动态添加的客户端脚本的时间是非常有利的。
分享到:
相关推荐
ClientScriptManager editor ajax
8.2 clientscriptmanager类功能详解 301 8.2.1 registerarraydeclaration方法 301 8.2.2 registerclientscriptblock方法 302 8.2.3 registerclientscriptinclude方法 303 8.2.4 registerclientscriptresource...
8.2 clientscriptmanager类功能详解 301 8.2.1 registerarraydeclaration方法 301 8.2.2 registerclientscriptblock方法 302 8.2.3 registerclientscriptinclude方法 303 8.2.4 registerclientscriptresource...
8.2 clientscriptmanager类功能详解 301 8.2.1 registerarraydeclaration方法 301 8.2.2 registerclientscriptblock方法 302 8.2.3 registerclientscriptinclude方法 303 8.2.4 registerclientscriptresource...
8.2 clientscriptmanager类功能详解301 8.2.1 registerarraydeclaration方法301 8.2.2 registerclientscriptblock方法302 8.2.3 registerclientscriptinclude方法303 8.2.4 registerclientscriptresource方法304...
在今天我主要要介绍的有如下知识点: Page类介绍、 Page的生命周期、 IsPostBack属性、 ClientScriptManager类、 回调技术(CallBack)
类名字空间前资源注册 代码如下: [assembly: System.Web.UI.WebResource(“XXX.js.FilePlugin.js”, “text/javascript”)] OnPreRender事件 //资源名称 string _strResourceKey = “”; //资源名称 ...
你好这不是一个很明确的问题,但是:如果要在内容页面中使用javascript,则:在内容页面中调用Page.ClientScriptManager.RegistgerClientScriptBlock如果问题是树文本框的总和,则需要将其值解析为int或double或......
代码如下:public static void prerepater(Repeater repeater,System.Web.UI.Page page) { ClientScriptManager cs = page.ClientScript; for (int i = 0; i < repeater.Items.Count; i++) { CheckBox cbx = ...
Invalid postback or callback ... If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
Invalid postback or callback ... If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.