ASP.NET里masterpage的javascript问题
2009-05-13 15:22
344 查看
masterpage是vs2005中的新功能,可以实现以前用模板页和框架页的效果,使页面的开发和维护据效率大大提高了,可是前天在做客户端验证时发现masterpage里面不能使用javascript,页面虽然可以显示,但是浏览器提示页面存在错误。
我们知道,masterpage不能独立运行,需要其他页面继承它才能运行。打开浏览器里面的HTML源文件发现服务器端的ASP控件(客户端被转化成HTML控件)元素的ID全变了,仔细一看就知道了原来masterpage里的元素ID前面全加上了“ctl00_”;但是JavaScript里面document.getElementById("ID")里面的ID没有变化!我们知道JavaScript是在客户端执行的脚本,这段JavaScript就出现错误,所以浏览器提示页面存在错误。
简单改进:
假设服务器定义asp控件
<asp:TextBox ID="name" runat="server" onblur="sendquest();"></asp:TextBox>
<asp:Label ID="mes" runat="server"></asp:Label>
把JavaScript代码里面的引用ID的地方前面直接加上“ctl00_”
var str = document.getElementById("ctl00_name").value;
document.getElementById("ctl00_mes").innerText = "hehe";
再次运行,没有再出现上述问题。
分析知道,假如Default.aspx继承masterpage,设计页面的时候他们是分开的,所以他们可能存在ID相同的控件项。(就是可能都有一个ID为"Button1"的按钮),但是生成Default.aspx后,它在客户端显示的HTML代码是Default.aspx和masterpage的HTML代码混在一起,这时候,为了预防相同ID冲突,就把他们的ID重新处理。这可能就是名字改变的原因所在。
下面我们再看一下,Default.aspx里面控件的名字 - 就是ContentPlaceHolder里面的控件的名字 的变化。
<asp:Button ID="Button2" runat="server"/>
生成的源文件里面ID变成
id="ctl00_ContentPlaceHolder1_Button2"
ID变成了以ctl00 + 下划线 + 容器ID +下划线+ 自己ID
这是一个树形层次关系的描述命名。如果你使用JavaScript,也应该对ID做出相应的修改。
Default.aspx里面的例子。
<script language=javascript>
<!--
function CheckTextBox()
{
var txtAgenNumber=document.getElementById("ctl00$ContentPlaceHolder1$txtAgenNumber");
if(txtAgenNumber.value=="")
{
alert("代理账号不能为空!");
txtAgenNumber.focus();
return false;
}
}
-->
</script>
我们知道,masterpage不能独立运行,需要其他页面继承它才能运行。打开浏览器里面的HTML源文件发现服务器端的ASP控件(客户端被转化成HTML控件)元素的ID全变了,仔细一看就知道了原来masterpage里的元素ID前面全加上了“ctl00_”;但是JavaScript里面document.getElementById("ID")里面的ID没有变化!我们知道JavaScript是在客户端执行的脚本,这段JavaScript就出现错误,所以浏览器提示页面存在错误。
简单改进:
假设服务器定义asp控件
<asp:TextBox ID="name" runat="server" onblur="sendquest();"></asp:TextBox>
<asp:Label ID="mes" runat="server"></asp:Label>
把JavaScript代码里面的引用ID的地方前面直接加上“ctl00_”
var str = document.getElementById("ctl00_name").value;
document.getElementById("ctl00_mes").innerText = "hehe";
再次运行,没有再出现上述问题。
分析知道,假如Default.aspx继承masterpage,设计页面的时候他们是分开的,所以他们可能存在ID相同的控件项。(就是可能都有一个ID为"Button1"的按钮),但是生成Default.aspx后,它在客户端显示的HTML代码是Default.aspx和masterpage的HTML代码混在一起,这时候,为了预防相同ID冲突,就把他们的ID重新处理。这可能就是名字改变的原因所在。
下面我们再看一下,Default.aspx里面控件的名字 - 就是ContentPlaceHolder里面的控件的名字 的变化。
<asp:Button ID="Button2" runat="server"/>
生成的源文件里面ID变成
id="ctl00_ContentPlaceHolder1_Button2"
ID变成了以ctl00 + 下划线 + 容器ID +下划线+ 自己ID
这是一个树形层次关系的描述命名。如果你使用JavaScript,也应该对ID做出相应的修改。
Default.aspx里面的例子。
<script language=javascript>
<!--
function CheckTextBox()
{
var txtAgenNumber=document.getElementById("ctl00$ContentPlaceHolder1$txtAgenNumber");
if(txtAgenNumber.value=="")
{
alert("代理账号不能为空!");
txtAgenNumber.focus();
return false;
}
}
-->
</script>
相关文章推荐
- 完美解决Asp.Net的MasterPage中添加JavaScript路径问题
- 【转】完美解决Asp.Net的MasterPage中添加JavaScript路径问题
- 完美解决Asp.Net的MasterPage中添加JavaScript路径问题
- 海洋工作室——网站建设专家:Calling JavaScript from ASP.NET Master Page and Content Pages - Part I
- 【兼容IE6】Asp.Net MasterPage在IE6 样色丢失问题解决
- 海洋工作室——网站建设专家:Calling JavaScript from ASP.NET Master Page and Content Pages - Part II
- Calling JavaScript from ASP.NET Master Page and Content Pages
- asp.net从masterPage继承的页面,如何在客户端用javascript取control(比如textbox)的值
- 解决 asp.net 中如果 Menu 控件放在 MasterPage 中, IE6 会出现的二级菜单不能正确显示的问题
- 关于Microsoft ASP.NET 2.0 AJAX Extensions UpdatePanel 中使用 javascript 产生错误的问题
- ASP.NET中System.Web.UI.Page的继承问题
- ASP.NET MasterPage 中图片路径的解决办法!
- ASP.NET 2.0 之 Master Page 学习笔记
- asp.net 2.0中tablecontrol搭配masterpage的小bug
- Asp.net 模板页(MasterPage)里的 js脚本路径
- 关于ASP.NET Web Api的HelpPage文档注释问题
- ASP.NET Master Page Drawbacks 母版页的缺点
- 使用asp.net的pageDataSource中时索引问题解决方法
- [转载]ASP.NET MasterPage 中图片路径的解决办法
- ASP.NET MVC- VIEW Creating Page Layouts with View Master Pages Part 4