dhl:4.0服务器端控件

套用母版页之后,生成的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>使用母版页面抽象模型-YJingLee</title></head> <body> <form. name="aspnetForm" method="post" action="Default2.aspx" id="aspnetForm"> <div> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPDwUKLTEwMTY2NjE0OWRkADUETiohcorj2qXOE9M1qhFVw20=" /> </div> <div>         <script. language="javascript" type="text/javascript"> // <!CDATA[ function insert() { document.getElementById("txt").value=document.getElementById("txt").value+"(__)"; return; } // ]]> </script> <div> <textarea name="ctl00$ContentPlaceHolder1$txt"
id="ctl00_ContentPlaceHolder1_txt" rows="10" cols="50"></textarea> <input type="submit" name="ctl00$ContentPlaceHolder1$btnInsert"
value="服务器端插入(_)" nclick="insert();" id="ctl00_ContentPlaceHolder1_btnInsert" /> <input name="ctl00$ContentPlaceHolder1$btnInsert2"
type="button" id="ctl00_ContentPlaceHolder1_btnInsert2"
nclick="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都变了。

1. 在Asp.Net 4.0 中我们可以控制输出html中的对象id的形式了,之前我们常常看到类似这样的id

  ctl00_MainContent_txtAutoID

  这在客户端控制时很不方便,也没有多少实质的意义

  现在我们可以通过设置控件的ClientIDMode修改clientId的输出形式,例如下面代码:

1 <asp:TextBox ID="txtPredictable" runat="server" ClientIDMode="Predictable"></asp:TextBox>  2     <asp:TextBox ID="txtAutoID" runat="server" ClientIDMode="AutoID"></asp:TextBox>  3     <asp:TextBox ID="txtInherit" runat="server" ClientIDMode="Inherit"></asp:TextBox>  4     <asp:TextBox ID="txtStatic" runat="server" ClientIDMode="Static"></asp:TextBox> 

  将分别输出

1 <input name="ctl00$MainContent$txtPredictable" type="text" id="MainContent_txtPredictable" />  2     <input name="ctl00$MainContent$txtAutoID" type="text" id="ctl00_MainContent_txtAutoID" />  3     <input name="ctl00$MainContent$txtInherit" type="text" id="MainContent_txtInherit" />  4     <input name="ctl00$MainContent$txtStatic" type="text" id="txtStatic" /> 

  AutoID: 自动输出和之前版本输出的clientID一样

  Static:输出和server端指定的id一样的id

  Predictable:对于dataGrid,listView特别有用,使ClientID值格式象clientIDrowsuffix一样;

  Inherit:这个值指定控件象它的父对象一样产生ID,即我们常说的继承。

  2. ASP.NET4.0 提供了一个叫做 ViewStateMode 的新属性,这个属性可以单独设置控件的视图状态。在以前版本的 ASP.NET 中,控件的视图只有在 Page 的 ViewState 启用的前提下才可以单独控制。在 ASP.NET4.0 中,控件的视图状态可以单独设置了,也就是说,即使页面的视图状态没有启用,控件依然可以启用视图状态。

  ViewStateMode 属性有三种取值:

  Inherit:视图状态从父控件继承;

  Enabled:即使父控件的视图状态没有启用,也启用该控件的视图状态;

  Disabled:即使父控件的视图状态启用了,也禁用此控件的视图状态。

原文地址:https://www.cnblogs.com/dudu837/p/2308582.html