页面显示的文字被显示在<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** 是ASP.NET框架中的一个关键组件,它主要负责在服务器端管理客户端脚本,以便在网页中执行JavaScript代码。这个组件是Web Forms架构的一部分,它为开发人员提供了一种方便的方式来组织、注册...
为了在服务器端代码中实现这一目的,***提供了一系列辅助类来帮助开发者输出JavaScript脚本。本文将详细讨论如何使用这些类来实现常见的客户端脚本功能。 首先,为了执行JavaScript代码,我们通常需要在***页面中...
- **ClientScriptManager**: ASP.NET中的类,用于管理客户端脚本,如注册JavaScript文件或脚本块。 - ** Razor视图引擎**: 支持在C#代码中嵌入HTML和JavaScript,使得服务器端生成动态内容更加直观。 - **AJAX和...
利用ASP.NET的`ClientScriptManager`类的`RegisterStartupScript`方法注册JavaScript脚本块,使得脚本可以在页面加载时执行。这种方法相比于直接输出HTML `<script>`标签更加安全且易于管理。 #### 5. ExecuteJs ...
通过ClientScriptManager,开发者可以方便地注册JavaScript函数、添加脚本引用或检查客户端脚本是否已经存在,从而实现更灵活的客户端交互和验证功能。例如,你可以使用RegisterStartupScript方法在页面上动态插入...
在自定义控件中嵌入JavaScript脚本,可以方便地为控件添加交互功能。有几种方式来实现这一点: - **内联脚本**:在控件的`RenderBeginTag`或`RenderContents`方法中直接写入`<script>`标签。 - **外部脚本文件**:...
在本文章中,我们看到三种方法用于注册Javascript,这些方法都是通过ClientScriptManager类的实例进行操作的,该实例通过Page类的ClientScript属性来获取。 1. IsStartupScriptRegistered方法:这个方法用于检查...
在C#类中定义一个`[WebMethod]`属性的静态方法,然后使用JavaScript的AJAX请求来调用。例如: ```csharp [WebMethod] public static string MyFunction() { return "返回的数据"; } ``` 在JavaScript中: ```...
在.NET框架中,我们可以使用`ClientScriptManager`类来管理这些脚本。例如,我们可以通过`RegisterStartupScript`或`RegisterClientScriptBlock`方法在页面生命周期的适当阶段注册脚本,确保它在页面加载时正确执行...
这些控件通常继承自`System.Web.UI.ClientScriptManager`或`System.Web.UI.ScriptControl`类。服务器端脚本控件允许开发者编写既能在服务器端运行,也能在客户端JavaScript环境中执行的代码,使得开发者能够更灵活地...
上述代码通过字符串拼接创建了一个简单的JavaScript脚本,并通过Response对象输出到客户端浏览器中。当这段HTML与JavaScript代码被浏览器解析时,将执行JavaScript中的`alert('hello')`函数,弹出一个包含"hello"的...
而从服务器端向客户端输出脚本时,可以使用`Response.Write`或者`ClientScriptManager`类,以更整洁的方式注入JavaScript代码。 选择使用Web服务器控件还是HTML控件取决于具体需求。如果需要复杂的交互和编程逻辑,...
例如,可以利用ClientScriptManager类(通过Page对象的ClientScript属性访问)来管理客户端脚本,添加JavaScript等,实现页面加载、按钮点击等事件的响应。 通过学习这些基础概念,初学者可以逐步掌握如何创建、...
3.3.1 使用htmltextwriter类输出 30 3.3.2 直接输出html标签 32 3.3.3 使用服务器控件的rendercontrol方法 33 3.4 addattributestorender方法 34 3.5 createchildcontrols方法 35 3.6 inamingcontainer接口 36 ...
3.3.1 使用htmltextwriter类输出 30 3.3.2 直接输出html标签 32 3.3.3 使用服务器控件的rendercontrol方法 33 3.4 addattributestorender方法 34 3.5 createchildcontrols方法 35 3.6 inamingcontainer接口 36 ...
C#代码中,我们可以利用`ClientScriptManager`类注册所需的JavaScript文件和初始化脚本。 在服务器端,我们需要处理控件的属性,比如默认日期、可选日期范围等。这些属性可以通过`[Bindable]`或`[DefaultValue]`...
这涉及到JavaScript脚本的注册、数据交换、事件处理以及利用jQuery的API进行DOM操作和动画效果的实现。通过这种方式,开发者可以充分利用.NET的强大后端处理能力和jQuery的前端便利性,提高Web应用的性能和用户体验...
ASP.NET提供了`ClientScriptManager`类来管理客户端脚本。你需要注册一个客户端验证函数,并在`ControlToValidate`属性指定的控件的`OnClientClick`事件中调用这个函数。 3. **CSS样式和错误消息**: 自定义控件可能...
JavaScript是一种广泛应用于网页动态效果和交互的脚本语言,与ASP.NET等服务器端技术结合,可以提供强大的前端功能。 下面是一个简单的JavaScript函数,用于遍历页面上所有的链接并禁用它们: ```javascript ...