快速业务通道

ASP.NET 2.0创建母版页引来的麻烦

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
gt;
<div>
<textarea name="ctl00$ContentPlaceHolder1$txt" id="ctl00_ContentPlaceHolder1_txt" rows="10" cols="50"></textarea>
<input type="submit" name="ctl00$ContentPlaceHolder1$btnInsert" value="服务器端插入(_)" onclick="insert();" id="ctl00_ContentPlaceHolder1_btnInsert" />
<input name="ctl00$ContentPlaceHolder1$btnInsert2" type="button" id="ctl00_ContentPlaceHolder1_btnInsert2" onclick="insert();" value="客户端插入(_)" /></div>
</div>
<div>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBAKyga4JAtO59ZELApOT2tEDApOTwvAC83bfMO00kt0PYcRte7XQOsXBcFE=" />
</div></form>
</body>
</html>

是不是看到问题了,源文件控件元素的ID和生成HTML文件的ID不一致。表单 from的name属性和id属性变成了aspnetForm,控件的id属性被无缘无故了加上了 ctl00_ContentPlaceHolder1_前缀,其name属性也加上了ctl00 $ContentPlaceHolder1$前缀。

这下知道了,难怪提示“''document.getElementById(...)'' 为空或不是对象 ”的错误了,原来生成页面后其ID都变了。

那么我们如何解决它呢?既然他id变了,我们就把JS代码id改为生成后的id。 代码如下:

以下是引用片段:
  function insert() {
  document.getElementById("ctl00$ContentPlaceHolder1$txt").value=document.getElementById("ctl00$ContentPlaceHolder1$txt").value+"(__)";
  return;
  }
  //或者
  function insert() {
  document.getElementById("ctl00_ContentPlaceHolder1_txt").value=document.getElementById("ctl00_ContentPlaceHolder1_txt").value+"(__)";
  return;
  }

好了,问题解决了,不过想想有什么更好的办法呢?到底为什么呢?

其实分析一下,它是后来生成的客户端id,我们可以用C#语句Control的 ClientID属性,像这样写:txt.ClientID; txt还是原来控件的id,后面的 ClientID就是新生成的id。txt.ClientID是从程序里取到的后来生成新的id,这 样不是更好吗。修改代码如下:

以下是引用片段:
function insert() {
document.getElementById("").value=document.getElementById("").value+"(__)";
return;
}

还有在后台Request.Form["txt"]键值需要改变,必须变为Request.Form[""] 才能接收到页面的值。想想如果想要得到ID的control是一个用户控件的话,当 生成页面后尽管能得到其ClientID,但是却得不到这个对象,所以也就不能设置 或获得其属性了。比如,我要做的这个用户控件,由三个DropDownList组成,可 是我却想得到一个完整的日期值(指在客户端),一种思路是先获得三个 DropDownList的ClientID,然后再由ID1.value+ID2.value+ID3.value取得,可 是如果你一个页面上需要放多个这样的用户控件的话,你需要取得多少个 ClientID?显然这样做的话,工作量会很大,而且要操作众多的对象,很容易出 错。

四、总结

这一类问题我像在我们编写程序时往往经常会遇到,总结一下:这应该属于 “使用了MasterPage,或者GridView中的模版列后所有元素ID不一致问题”。由 于种种原因(比如使用了MasterPage,或者GridView中的模版列),一个

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号