js怎麼樣取得內容頁的控件

 今天在引用了母版页的内容页中要判断用户留言的名称不能为空,如果在后台写
ClientScript.RegisterClientScriptBlock来注册提示用户,整个页面会刷白,只有前台写判断
if(document.getElementById("txtName").value == "")
   {
    alert("请填写用户名!");
    document.getElementById("txtName").focus();
    return false;
   }

上面的方法在没有引用母版页的页面中很正常,但是我在内容页中这样写,找不到txtName控件,
js会报错.就郁闷了我在网站后台程序里的一般页面(没引用母版页)里都可以,怎么现在不可以呢?折腾了半天,突然想起了查看运行后网页的源文件,这下才明白了.

txtName控件名前自动加了ctl00_ContentPlaceHolder1,也就是变成
ctl00_ContentPlaceHolder1_txtName.也就是在所有的控件前加了一个前缀,个人认为就是母版页中的
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
所添加的.将上面的JS改了下就可以了即
if(document.getElementById("ctl00_ContentPlaceHolder1_txtName").value == "")
   {
    alert("请填写用户名!");
    document.getElementById("ctl00_ContentPlaceHolder1_txtName").focus();
    return false;
   }
运行了一切正常,在前台的提示框不会使页面刷白.我查了下资料说在加了模板页之后所有 Control 的ID都会加上一个自动生成的前缀,这时我看到了一个"自动",我就怕每次运行是随机生成的,如果是我想的那样又会找不到了.但是我运行几次后查看了源文件后发现每次都是在前面加了ctl00_ContentPlaceHolder1.呵呵,将就可以用了.但是还是不放心,万一随机了就麻烦了
再将其最后改成
if(document.getElementById('<%=txtName.ClientID%>').value == "")
   {
    alert("请填写用户名!");
    document.getElementById('<%=txtName.ClientID%>').focus();
    return false;
   }
取的是生成html后的客户端的ID这样就再也不会找不到啦~~~
原文地址:https://www.cnblogs.com/conquer/p/1336519.html