关于asp:ScriptManager与Script代码块的位置关系问题
在学校Ajax时遇到了一个小问题,先来看一下原来的代码:

然后我就纳闷了,怎么会这样?很是郁闷~~!其实我们只要把<Script>代码块放到asp:ScriptManager的后面,问题就解决了。
正确的代码如下:
1
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MSDNWebCast_20070621.WebForm1" %>
2
3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5
<html xmlns="http://www.w3.org/1999/xhtml" >
6
<head runat="server">
7
<title>Untitled Page</title>
8
<script language="javascript" type="text/javascript">
9
Type.registerNamespace('Demo');
10
11
Demo.Person = function(firstName, lastName, emailAddress)
12
{
13
this._firstName = firstName;
14
this._lastName = lastName;
15
this._emailAddress = emailAddress;
16
}
17
</script>
18
</head>
19
<body>
20
<form id="form1" runat="server">
21
<asp:ScriptManager ID="ScriptManager1" runat="server">
22
</asp:ScriptManager>
23
<div>
24
25
</div>
26
</form>
27
</body>
28
29
</html>
30
在运行时会弹出如下图所示的错误:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MSDNWebCast_20070621.WebForm1" %>2

3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">4

5
<html xmlns="http://www.w3.org/1999/xhtml" >6
<head runat="server">7
<title>Untitled Page</title>8
<script language="javascript" type="text/javascript">9
Type.registerNamespace('Demo');10
11
Demo.Person = function(firstName, lastName, emailAddress)12
{13
this._firstName = firstName;14
this._lastName = lastName;15
this._emailAddress = emailAddress;16
}17
</script>18
</head>19
<body>20
<form id="form1" runat="server">21
<asp:ScriptManager ID="ScriptManager1" runat="server">22
</asp:ScriptManager>23
<div>24
25
</div>26
</form>27
</body>28

29
</html>30


然后我就纳闷了,怎么会这样?很是郁闷~~!其实我们只要把<Script>代码块放到asp:ScriptManager的后面,问题就解决了。
正确的代码如下:
1
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MSDNWebCast_20070621.WebForm1" %>
2
3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5
<html xmlns="http://www.w3.org/1999/xhtml" >
6
<head runat="server">
7
<title>Untitled Page</title>
8
</head>
9
<body>
10
<form id="form1" runat="server">
11
<asp:ScriptManager ID="ScriptManager1" runat="server">
12
</asp:ScriptManager>
13
<div>
14
15
</div>
16
</form>
17
</body>
18
<script language="javascript" type="text/javascript">
19
Type.registerNamespace('Demo');
20
21
Demo.Person = function(firstName, lastName, emailAddress)
22
{
23
this._firstName = firstName;
24
this._lastName = lastName;
25
this._emailAddress = emailAddress;
26
}
27
</script>
28
</html>
29
个人分析原因可能是浏览器在解析文档时是顺序解析的,所以在asp:ScriptManager之前代码是不认识Type为何物的。自然就会报错,说Type未定义。因此我们在以后添加Javascript代码时要注意放到asp:ScriptManager的后面。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MSDNWebCast_20070621.WebForm1" %>2

3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">4

5
<html xmlns="http://www.w3.org/1999/xhtml" >6
<head runat="server">7
<title>Untitled Page</title>8
</head>9
<body>10
<form id="form1" runat="server">11
<asp:ScriptManager ID="ScriptManager1" runat="server">12
</asp:ScriptManager>13
<div>14
15
</div>16
</form>17
</body>18
<script language="javascript" type="text/javascript">19
Type.registerNamespace('Demo');20
21
Demo.Person = function(firstName, lastName, emailAddress)22
{23
this._firstName = firstName;24
this._lastName = lastName;25
this._emailAddress = emailAddress;26
}27
</script>28
</html>29



浙公网安备 33010602011771号