最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET 4.0配置文件中的ClientIDMode屬性詳解

 更新時(shí)間:2018年11月10日 08:59:53   作者:森大科技  
在ASP.NET 4.0中的每個(gè)控件上都多了一個(gè)叫做ClientIDMode的屬性,本文主要介紹了ASP.NET 4.0配置文件中的ClientIDMode屬性詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

時(shí)光流逝,我們心愛的ASP.NET也步入了4.0的時(shí)代,微軟在ASP.NET 4.0中對(duì)很多特性做了修改。比如我將要討論的控件ID機(jī)制就是其中之一。

在ASP.NET 4.0之前我們總是要為控件的ClientID頭疼,比如明明一個(gè)叫l(wèi)blName的Label放在一個(gè)叫做grd的GridView里面后,在頁面上改Label的ID就變成了諸如grd_clt02_lblName的一長(zhǎng)串字符串,如果我們?cè)谇芭_(tái)想在使用JS的時(shí)候找到該Label,我們不得不用到C#腳本來獲得該Label在前臺(tái)的確切ID,諸如:

< type="text/ ">
  var lblName = document.getElementById("<%=lblName.ClientID %>");
</ >

在ASP.NET 4.0中的每個(gè)控件上都多了一個(gè)叫做ClientIDMode的屬性,這就是解決上面獲取控件ID難的解決方案。這個(gè)屬性有四個(gè)可選值,根據(jù)所選值的不同它可以控制頁面上生成控件的ID格式。

下面就讓我們來了解下ClientIDMode屬性的四個(gè)值:

1,AutoID:

當(dāng)控件的ClientIDMode選中為AutoID時(shí),該控件的ClientID 值是通過串聯(lián)每個(gè)祖先容器控件(諸如GridView、ListView、LoginView等就是容器性控件)的ID和父容器控件的ID和其本身的ID 值生成的,當(dāng)然如果該控件沒有在任何容器控件中其ClientID 值就是其本身的ID值,不會(huì)做任何更改。 另外如果該控件所在的父容器控件或祖先容器控件有些是顯示多個(gè)數(shù)據(jù)行的容器控件(例如GridView、ListView就是顯示多數(shù)據(jù)行的容器控件),那么還將在這些容器控件的ID值的后面會(huì)插入一個(gè)遞增的行號(hào)格式。 各部分之間以下劃線字符 (_) 分隔。 可見在 ASP.NET 4 之前的版本中使用的就是AutoID方案來生成控件的ClientID 值。

比如下面這個(gè)GridView里面就有一個(gè)名叫Label1的ID,我們將Label1的ClientIDMode設(shè)置為了AutoID:

<asp:GridView ID="grd_Account" runat="server" AllowPaging="True" 
  AutoGenerateColumns="False" 
  DataKeyNames="Account Number" DataSourceID="sds_account" Height="63px" 
  Width="676px" PageSize="5" ClientIDMode="AutoID" >
  <Columns>
    <asp:TemplateField HeaderText="Account Number" Sort ="Account Number">
      <ItemTemplate>
        <asp:Label ID="Label1" runat="server"
          Text='<%# Bind("[Account Number]") %>' ClientIDMode="AutoID"></asp:Label>
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView>

該GridView生成的客戶端HTML代碼就是:

<table cellspacing="0" rules="all" border="1" id="grd_Account" style="height:63px;width:676px;border-collapse:collapse;">
  <tr>
    <th scope="col">Account Number</th>
  </tr>
    <tr>
  <td>
      <span id="grd_Account_ctl02_Label1">1060</span>
    </td>
  </tr>
    <tr>
  <td>
      <span id="grd_Account_ctl03_Label1">1200</span>
    </td>
  </tr>
    <tr>
  <td>
      <span id="grd_Account_ctl04_Label1">1510</span>
    </td>
  </tr>
</table>

可以看到GirdView里面的Label形成了諸如grd_Account_ctl02_Label1格式的ClientID,而這正是:父容器ID(grd_Account)+"_"+行號(hào)格式(ctl02)+"_"+控件自身ID(ClientID)這種格式生成的。

2,Static:

當(dāng)控件的ClientIDMode選中為Static時(shí),該控件的ClientID 值就是其本身設(shè)置的 ID 屬性值,其ClientID值不會(huì)受到父容器控件的影響。 

比如我們把上面的代碼稍作修改,將Label1的ClientIDMode屬性改為Static:

<asp:GridView ID="grd_Account" runat="server" AllowPaging="True" 
  AutoGenerateColumns="False" 
  DataKeyNames="Account Number" DataSourceID="sds_account" Height="63px" 
  Width="676px" PageSize="5" >
  <Columns>
    <asp:TemplateField HeaderText="Account Number" Sort ="Account Number">
      <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("[Account Number]") %>' ClientIDMode="Static"></asp:Label>
      </ItemTemplate>        
    </asp:TemplateField>
  </Columns>
</asp:GridView>

運(yùn)行后查看得到的HTML代碼:

<table cellspacing="0" rules="all" border="1" id="grd_Account" style="height:63px;width:676px;border-collapse:collapse;">
  <tr>
    <th scope="col">Account Number</th>
  </tr><tr>
    <td>
      <span id="Label1">1060</span>
    </td>
  </tr><tr>
    <td>
      <span id="Label1">1200</span>
    </td>
  </tr><tr>
    <td>
      <span id="Label1">1510</span>
    </td>
  </tr>
</table>

看到了嗎,GridView里每行的Label1的ClientID都以自身ID的值出現(xiàn)了,不會(huì)受到父級(jí)容器控件的ID影響,這樣在前臺(tái)使用JS時(shí)我們就能通控件本身的ID值找到我們想要的控件了。

此外使用Static后勢(shì)必頁面中會(huì)出現(xiàn)很多同名的控件ID,只要這些同名ID的控件處于頁面的不同層次(比如某一容器控件的內(nèi)部和外部就是不同層次)上那么就不會(huì)出現(xiàn)問題,但是如果頁面同一層次上有多個(gè)同ID的控件,那么頁面就會(huì)報(bào)錯(cuò)。

3,Inherit:

這個(gè)屬性其實(shí)沒什么好說的,如果控件的ClientIDMode選中為Inherit,那么表示該控件的ClientIDMode會(huì)使用父級(jí)容器控件的ClientIDMode值,如果父級(jí)容器控件的ClientIDMode也為Inherit,那么會(huì)使用更上層容器控件的ClientIDMode值,直到回溯到頁面的ClientIDMode值為止,頁面的ClientIDMode值默認(rèn)為Predictable ,你可以在頁面上的<%@ Page%>指令中對(duì)該值做更改。此外Inherit也是ASP.NET 4.0中所有控件的ClientIDMode屬性的默認(rèn)值。

4,Predictable:

首先我先說明下之所以最后寫Predictable,是因?yàn)槲野l(fā)現(xiàn)控件的ClientIDMode為Predictable時(shí)生成ClientID的機(jī)制會(huì)非常復(fù)雜,要分好幾個(gè)部分分別進(jìn)行討論,其中還有特殊情況,所以我在這里只能說盡量將我發(fā)現(xiàn)的Predictable生成ClientID的機(jī)制闡述清楚。

當(dāng)控件的ClientIDMode選中為Predictable時(shí),該控件的ClientID 值是通過串聯(lián)父容器控件(諸如GridView、ListView、LoginView等就是容器性控件)的 ClientID 值生成的。另外如果該控件是在顯示多個(gè)數(shù)據(jù)行的父容器控件或祖先容器控件中(例如GridView、ListView就是顯示多數(shù)據(jù)行的容器控件),則還會(huì)在該控件ClientID 值的末尾添加 ClientIDRowSuffix 屬性中指定的數(shù)據(jù)字段的值。 對(duì)于 GridView 控件,ClientIDRowSuffix 屬性可以指定多個(gè)數(shù)據(jù)字段。 如果 ClientIDRowSuffix 屬性為空白,則在末尾添加遞增的行號(hào),而非數(shù)據(jù)字段值。 各部分之間以下劃線字符 (_) 分隔。

以上是MSDN的說法,但是經(jīng)過試驗(yàn),我發(fā)現(xiàn)Predictable的特性更應(yīng)該是用這么個(gè)式子來表達(dá):

Inherit[+"_"+ClientIDRowSuffix]

意思就是說,如果一個(gè)控件的ClientIDMode選中為Predictable,那么在ASP.NET生成該控件的ClientID時(shí)首先會(huì)去看該控件所屬的父容器控件的ClientIDMode是什么值,然后先用該控件父容器控件的ClientIDMode規(guī)則生成該控件本身的ClientID,最后如果該控件所屬的父容器控件或祖先容器控件是顯示多個(gè)數(shù)據(jù)行的容器控件,還會(huì)根據(jù)父容器控件或祖先容器控件的ClientIDRowSuffix屬性的值在該控件已生成的ClientID后面加上一個(gè)后綴字符串。

下面將幾種情況逐一列出來單獨(dú)解釋:

<1>如果父容器控件的ClientIDMode值為AutoID

  •  如果父容器控件或祖先容器控件為顯示多個(gè)數(shù)據(jù)行的容器控件,那么該控件的ClientID格式為:[父/祖先容器控件的ID+"_"+[行號(hào)格式+"_"]]+該控件自身ID+"_"+[ClientIDRowSuffix],其中ClientIDRowSuffix部分是什么后面會(huì)單獨(dú)說明,其中:[父/祖先容器控件的ID+"_"+[行號(hào)格式+"_"]],就是該控件自身ClientIDMode值繼承父容器控件ClientIDMode值A(chǔ)utoID生成的ClientID結(jié)果,其中的[行號(hào)格式+"_"]部分是否存在依賴于[父/祖先容器控件]部分是否是顯示多個(gè)數(shù)據(jù)行的容器控件(這里不明白請(qǐng)看前面的AutoID部分)。
  • 如果父容器控件或祖先容器控件都不是顯示多個(gè)數(shù)據(jù)行的容器控件,那么該控件的ClientID格式為:[父/祖先容器控件的ID+"_"]+該控件自身ID,可見這個(gè)格式就是該控件自身ClientIDMode值繼承父容器控件ClientIDMode值A(chǔ)utoID生成的ClientID結(jié)果(這里不明白請(qǐng)看前面的AutoID部分)。

下面我就舉一個(gè)父容器控件是多數(shù)據(jù)行容器控件且其ClientIDMode為AutoID的例子,將上面的代碼再做更改,將Label1的ClientIDMode屬性值改為Predictable,并且設(shè)置其父容器控件grd_Account的ClientIDMode為AutoID:

<asp:GridView ID="grd_Account" runat="server" AllowPaging="True" 
  AutoGenerateColumns="False" 
  DataKeyNames="Account Number" DataSourceID="sds_account" Height="63px" 
  Width="676px" PageSize="5" ClientIDMode="AutoID" >
  <Columns>
    <asp:TemplateField HeaderText="Account Number" Sort ="Account Number">
      <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text="Logged" ClientIDMode="Predictable"></asp:Label>
      </ItemTemplate>        
    </asp:TemplateField>
  </Columns>
</asp:GridView>

其生成的HTML代碼為:

<table cellspacing="0" rules="all" border="1" id="grd_Account" style="height:63px;width:676px;border-collapse:collapse;">
  <tr>
  <th scope="col">Account Number</th>
  </tr>
  <tr>
  <td>
      <span id="grd_Account_ctl02_Label1_0">Logged</span>
    </td>
  </tr>
  <tr>
  <td>
      <span id="grd_Account_ctl03_Label1_1">Logged</span>
    </td>
  </tr>
  <tr>
  <td>
      <span id="grd_Account_ctl04_Label1_2">Logged</span>
    </td>
  </tr>
</table>

可以看到生成的Label的控件的ID諸如:grd_Account_ctl02_Label1_0正是上面所述格式:父容器控件的ID(grd_Account)+"_"+行號(hào)格式(ctl02)+"_"+該控件自身ID(Label1)+"_"+[ClientIDRowSuffix](0)。

<2>如果父容器控件的ClientIDMode值為Static

  •  如果父容器控件或祖先容器控件為顯示多個(gè)數(shù)據(jù)行的容器控件,那么該控件的ClientID格式為:該控件自身ID+"_"+[ClientIDRowSuffix],其中ClientIDRowSuffix部分是什么后面會(huì)單獨(dú)說明,其中:該控件自身ID,就是該控件自身ClientIDMode值繼承父容器控件ClientIDMode值Static生成的ClientID結(jié)果(這里不明白請(qǐng)看前面的Static部分)。
  • 如果父容器控件或祖先容器控件都不是顯示多個(gè)數(shù)據(jù)行的容器控件,那么該控件的ClientID格式為:該控件自身ID,可見這個(gè)格式就是該控件自身ClientIDMode值繼承父容器控件ClientIDMode值Static生成的ClientID結(jié)果(這里不明白請(qǐng)看前面的Static部分)。

下面我就舉一個(gè)父容器控件是多數(shù)據(jù)行容器控件且其ClientIDMode為Static的例子,將上面的代碼再做更改,將Label1的ClientIDMode屬性值改為Predictable,并且設(shè)置其父容器控件grd_Account的ClientIDMode為Static:

<asp:GridView ID="grd_Account" runat="server" AllowPaging="True" 
  AutoGenerateColumns="False" 
  DataKeyNames="Account Number" DataSourceID="sds_account" Height="63px" 
  Width="676px" PageSize="5" ClientIDMode="Static" >
  <Columns>
    <asp:TemplateField HeaderText="Account Number" Sort ="Account Number">
      <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text="Logged" ClientIDMode="Predictable"></asp:Label>
      </ItemTemplate>        
    </asp:TemplateField>
  </Columns>
</asp:GridView>

其生成的HTML代碼為:

<table cellspacing="0" rules="all" border="1" id="grd_Account" style="height:63px;width:676px;border-collapse:collapse;">
  <tr>
  <th scope="col">Account Number</th>
  </tr>
  <tr>
  <td>
      <span id="Label1_0">Logged</span>
    </td>
  </tr>
  <tr>
  <td>
      <span id="Label1_1">Logged</span>
    </td>
  </tr>
  <tr>
  <td>
      <span id="Label1_2">Logged</span>
    </td>
    </tr>
</table>

可以看到生成的Label的控件的ID諸如:Label1_0正是上面所述格式:該控件自身ID(Label1)+"_"+[ClientIDRowSuffix](0)。

<3>如果父容器控件的ClientIDMode值為Predictable

  • 如果父容器控件或祖先容器控件為顯示多個(gè)數(shù)據(jù)行的容器控件,那么該控件的ClientID格式為:父容器控件的ClientID+"_"+該控件自身ID+"_"+[ClientIDRowSuffix],其中ClientIDRowSuffix部分是什么后面會(huì)單獨(dú)說明,可見這種情況才屬于MSDN上所說的格式。
  • 如果父容器控件或祖先容器控件都不是顯示多個(gè)數(shù)據(jù)行的容器控件,那么該控件的ClientID格式為:父容器控件的ClientID+"_"+該控件自身ID,可見這種情況才是MSDN上所說的格式。

下面我就舉一個(gè)父容器控件是多數(shù)據(jù)行容器控件且其ClientIDMode為Predictable的例子,將上面的代碼再做更改,將Label1的ClientIDMode屬性值改為Predictable,并且設(shè)置其父容器控件grd_Account的ClientIDMode也為Predictable:

<asp:GridView ID="grd_Account" runat="server" AllowPaging="True" 
  AutoGenerateColumns="False" 
  DataKeyNames="Account Number" DataSourceID="sds_account" Height="63px" 
  Width="676px" PageSize="5" ClientIDMode="Predictable" >
  <Columns>
    <asp:TemplateField HeaderText="Account Number" Sort ="Account Number">
      <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text="Logged" ClientIDMode="Predictable"></asp:Label>
      </ItemTemplate>        
    </asp:TemplateField>
  </Columns>
</asp:GridView>

其生成的HTML代碼為:

<table cellspacing="0" rules="all" border="1" id="grd_Account" style="height:63px;width:676px;border-collapse:collapse;">
  <tr>
  <th scope="col">Account Number</th>
  </tr>
  <tr>
  <td>
      <span id="grd_Account_Label1_0">Logged</span>
    </td>
  </tr>
  <tr>
  <td>
      <span id="grd_Account_Label1_1">Logged</span>
    </td>
  </tr>
  <tr>
  <td>
      <span id="grd_Account_Label1_2">Logged</span>
    </td>
    </tr>
</table>

可以看到生成的Label的控件的ID諸如:grd_Account_Label1_0正是上面所述格式:父容器控件的ClientID(grd_Account)+"_"+該控件自身ID(Label1)+"_"+[ClientIDRowSuffix](0)。

<4>如果父容器控件的ClientIDMode值為Inherit

這種情況沒什么好說的,因?yàn)楦溉萜骺丶腃lientIDMode值會(huì)繼承其所在更上層的祖先容器控件的ClientIDMode值,繼承后也屬于上面三種情況之一。

最后來說說ClientIDRowSuffix部分是什么,如果父容器控件或祖先容器控件是顯示多數(shù)據(jù)行的容器控件(后面會(huì)討論到如果控件的ClientIDMode為Predictable,在判斷該控件是否在顯示多數(shù)據(jù)行的容器控件中時(shí),會(huì)有一種特殊的穿透現(xiàn)象),那么父容器控件或祖先容器控件會(huì)有個(gè)屬性叫ClientIDRowSuffix,比如本例中的GridView的ClientIDRowSuffix屬性,這個(gè)屬性的作用是為設(shè)定ClientIDMode值為Predictable的子控件生成ClientID的后綴字符串(就是上面那些ClientID格式中的ClientIDRowSuffix部分):

如果 ClientIDRowSuffix 屬性為空白,則在已生成的子控件ClientID末尾添加遞增的行號(hào)并在行號(hào)前面加上下劃線字符 (_) 分隔,比如上面的例子中由于都沒有在GridView上設(shè)置ClientIDRowSuffix屬性,所以ClientIDRowSuffix為空白,那么生成的子控件ClientID最末位都有諸如_0、_1、_2等的遞增行號(hào)。 

此外還可以設(shè)置ClientIDRowSuffix 屬性值為父容器控件或祖先容器控件中DataSource數(shù)據(jù)源中的字段,這樣生成子控件ClientID的后綴字符串為ClientIDRowSuffix 指定字段在該行的數(shù)據(jù)值,并且ClientIDRowSuffix 屬性可指定多個(gè)DataSource數(shù)據(jù)源中的數(shù)據(jù)字段,那么在生成子控件ClientID時(shí)會(huì)將每個(gè)數(shù)據(jù)字段在該行的值用下劃線字符 (_) 進(jìn)行分隔然后作為ClientID后綴字符串。

現(xiàn)在就舉個(gè)例子,將上面的代碼再做更改將Label1的ClientIDMode屬性值改為Predictable,并且設(shè)置其父容器控件grd_Account的ClientIDMode也為Predictable,并且將grd_Account的ClientIDRowSuffix設(shè)置為數(shù)據(jù)源sds_account的Account Number字段:

<asp:GridView ID="grd_Account" runat="server" AllowPaging="True" 
  AutoGenerateColumns="False" 
  DataKeyNames="Account Number" DataSourceID="sds_account" Height="63px" 
  Width="676px" PageSize="5" ClientIDMode="Predictable" ClientIDRowSuffix="Account Number" >
  <Columns>
    <asp:TemplateField HeaderText="Account Number" Sort ="Account Number">
      <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text="Logged" ClientIDMode="Predictable"></asp:Label>
      </ItemTemplate>        
    </asp:TemplateField>
  </Columns>
</asp:GridView>

其生成的HTML代碼為:

<table cellspacing="0" rules="all" border="1" id="grd_Account" style="height:63px;width:676px;border-collapse:collapse;">
  <tr>
  <th scope="col">Account Number</th>
  </tr>
    <tr>
  <td>
      <span id="grd_Account_Label1_1060">Logged</span>
    </td>
  </tr>
  <tr>
  <td>
      <span id="grd_Account_Label1_1200">Logged</span>
    </td>
  </tr>
  <tr>
  <td>
      <span id="grd_Account_Label1_1510">Logged</span>
    </td>
    </tr>
</table>

可以看到生成子控件的ClientID的后綴字符串為Account Number字段在GridView上每行的值:1060、1200、1500,其不再是遞增的行號(hào).

EX:最后Predictable還有一個(gè)很特別的特性:

當(dāng)控件的ClientIDMode為Predictable且該控件在多個(gè)嵌套的容器控件中時(shí),判斷該控件是否在顯示多數(shù)據(jù)行的容器控件中時(shí),會(huì)具有層次穿透性,它不但會(huì)考察父容器控件,還會(huì)考察祖先容器控件。

下面就舉個(gè)例子來說明這種情況,首先grd_Account為顯示多數(shù)據(jù)行的容器控件,它的ClientIDMode設(shè)置為Static,在它內(nèi)部有一個(gè)ID為L(zhǎng)oginView1的LoginView,我們知道LoginView也是容器性控件,只不過它不是顯示多數(shù)據(jù)行的容器控件,這里設(shè)置LoginView1的ClientIDMode屬性為Predictable,在LoginView1里面再放置一個(gè)ID為L(zhǎng)abel1的Label,它的ClientIDMode沒有設(shè)置,所以其值也默認(rèn)繼承為Predictable,下面是代碼:

<asp:GridView ID="grd_Account" runat="server" AllowPaging="True" 
  AutoGenerateColumns="False" 
  DataKeyNames="Account Number" DataSourceID="sds_account" Height="63px" 
  Width="676px" PageSize="5" ClientIDMode="Static" >
  <Columns>
    <asp:TemplateField HeaderText="Account Number" Sort ="Account Number">
      <ItemTemplate>
        <asp:LoginView ID="LoginView1" runat="server" ClientIDMode="Predictable" >
          <LoggedInTemplate>
            <asp:Label ID="Label1" runat="server" Text="Logged"></asp:Label>
          </LoggedInTemplate>
        </asp:LoginView>
      </ItemTemplate>        
    </asp:TemplateField>
  </Columns>
</asp:GridView>

可以看到在嵌套層次結(jié)構(gòu)中,由于LoginView1所屬的父容器控件grd_Account是顯示多數(shù)據(jù)行的容器控件,所以LoginView1的ClientID應(yīng)該是諸如:LoginView1_0、LoginView1_1等有ClientIDRowSuffix部分的格式,這沒有問題,但是按道理來說Label1所在的父容器控件LoginView1不是顯示多數(shù)據(jù)行的容器控件,那么Label1生成的ClientID 應(yīng)該是諸如LoginView1_0_Label1、LoginView1_1_Label1等這樣的沒有ClientIDRowSuffix部分的格式,但是為我們來看一下生成的HTML代碼:

<table cellspacing="0" rules="all" border="1" id="grd_Account" style="height:63px;width:676px;border-collapse:collapse;">
  <tr>
  <th scope="col">Account Number</th>
  </tr>
  <tr>
  <td>
      <span id="LoginView1_0_Label1_0">Logged</span>  
    </td>
  </tr>
  <tr>
  <td>
      <span id="LoginView1_1_Label1_1">Logged</span> 
    </td>
  </tr>
  <tr>
  <td>
      <span id="LoginView1_2_Label1_2">Logged</span>
    </td>
  </tr>
</table>

可以看到生成的Label1的ClientID都帶表示遞增行號(hào)的后綴字符串0、1、2等(此外請(qǐng)注意LoginView不會(huì)產(chǎn)生HTML代碼),也就是有ClientIDRowSuffix部分。

我們?cè)賹rd_Account的ClientIDRowSuffix屬性更改為數(shù)據(jù)源中的Account Number字段后再來看看生成的HTML代碼:

<table cellspacing="0" rules="all" border="1" id="grd_Account" style="height:63px;width:676px;border-collapse:collapse;">
  <tr>
  <th scope="col">Account Number</th>
  </tr>
  <tr>
  <td> 
      <span id="LoginView1_1060_Label1_1060">Logged</span>   
    </td>
  </tr>
  <tr>
  <td> 
      <span id="LoginView1_1200_Label1_1200">Logged</span>   
    </td>
  </tr>
  <tr>
  <td>
      <span id="LoginView1_1510_Label1_1510">Logged</span>   
    </td>
  </tr>
</table>

可以看到生成的Label1的ClientID也都帶ClientIDRowSuffix部分,只不過ClientIDRowSuffix部分現(xiàn)在是數(shù)據(jù)源中Account Number字段的值。

由此可見在判斷Label1是否在顯示多數(shù)據(jù)行的容器控件中時(shí),判定機(jī)制進(jìn)行了穿透,即假如有這么一組嵌套的容器控件:Control_1<-Control_2<-Control_3<-.......<-Control1_n-1<-Control_n,其中Control_n的ClientIDMode設(shè)置或繼承為Predictable,且其中Control_2到Control1_n-1都不是顯示多數(shù)據(jù)行的容器控件,只有最外層的Control_1是顯示多數(shù)據(jù)行的容器控件,那么在判定最里面的Control_n是否在顯示多數(shù)據(jù)行的容器控件時(shí),參考的是從里到外第一個(gè)是顯示多數(shù)據(jù)行的容器控件Control_1(即從里到外只要任意一個(gè)容器控件是顯示多數(shù)據(jù)行的容器控件,就認(rèn)為Control_n是在顯示多數(shù)據(jù)行的容器控件中),并且Control_n的后綴字符串部分參考的也是Control_1的ClientIDRowSuffix屬性,從而忽略中間那些不是顯示多數(shù)據(jù)行的容器控件(Control_2到Control1_n-1),所以控件的ClientIDMode屬性為Predictable時(shí),就是用這種穿透判定來判斷該控件是否在顯示多數(shù)據(jù)行的容器控件中的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 用類的繼承關(guān)系(重寫父類的方法)實(shí)現(xiàn)簡(jiǎn)易后臺(tái)代碼模板

    用類的繼承關(guān)系(重寫父類的方法)實(shí)現(xiàn)簡(jiǎn)易后臺(tái)代碼模板

    Asp.net的優(yōu)勢(shì)就在于快速構(gòu)建應(yīng)用,而對(duì)于一些最基礎(chǔ)數(shù)據(jù)的增刪改以及分頁事件或者樣式的設(shè)定可以通過在父類中寫上虛方法來供子類調(diào)用,接下來將為您測(cè)試一下用子類重寫父類的方法實(shí)現(xiàn)在模板的基礎(chǔ)上衍生變化
    2013-01-01
  • WPF常見布局面板用法及介紹

    WPF常見布局面板用法及介紹

    本文詳細(xì)講解了WPF常見布局面板用法及介紹,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • .net?6項(xiàng)目實(shí)現(xiàn)壓縮發(fā)布

    .net?6項(xiàng)目實(shí)現(xiàn)壓縮發(fā)布

    這篇文章介紹了.net?6項(xiàng)目實(shí)現(xiàn)壓縮發(fā)布的方式,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • ASP.NET中TimeSpan的用法實(shí)例解析

    ASP.NET中TimeSpan的用法實(shí)例解析

    這篇文章主要介紹了ASP.NET中TimeSpan的用法,以實(shí)例的形式具體分析了TimeSpan應(yīng)用中的各種常見常量、字段、屬性與方法等,非常具有參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2014-10-10
  • .NET日志框架Nlog使用介紹

    .NET日志框架Nlog使用介紹

    這篇文章介紹了.NET日志框架Nlog的使用方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • asp.net C# 時(shí)間間隔的計(jì)算方法

    asp.net C# 時(shí)間間隔的計(jì)算方法

    C#時(shí)間間隔計(jì)算可以通過時(shí)間刻度類TimSpan類實(shí)現(xiàn),這是一個(gè)系統(tǒng)類。
    2010-03-03
  • ASP.NET實(shí)現(xiàn)圖形驗(yàn)證碼功能

    ASP.NET實(shí)現(xiàn)圖形驗(yàn)證碼功能

    ASP.NET 實(shí)現(xiàn)圖形驗(yàn)證碼能夠增強(qiáng)網(wǎng)站安全性,防止機(jī)器人攻擊,本文介紹了如何使用 C# 和 ASP.NET 創(chuàng)建一個(gè)簡(jiǎn)單而有效的圖形驗(yàn)證碼系統(tǒng),包括生成隨機(jī)驗(yàn)證碼、繪制驗(yàn)證碼圖像以及將圖像輸出到客戶端等步驟,感興趣的朋友一起看看吧
    2024-03-03
  • .NET Core利用swagger進(jìn)行API接口文檔管理的方法詳解

    .NET Core利用swagger進(jìn)行API接口文檔管理的方法詳解

    這篇文章主要給大家介紹了關(guān)于.NET Core利用swagger進(jìn)行API接口文檔管理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • .NET中的Swagger使用示例詳解

    .NET中的Swagger使用示例詳解

    Swagger?(OpenAPI)?是一個(gè)與語言無關(guān)的規(guī)范,用于描述?REST?API,這篇文章給大家介紹.NET中的Swagger使用,感興趣的朋友一起看看吧
    2023-12-12
  • ASP.NET在MVC中MaxLength特性設(shè)置無效的解決方法

    ASP.NET在MVC中MaxLength特性設(shè)置無效的解決方法

    這篇文章主要介紹了ASP.NET在MVC中MaxLength特性設(shè)置無效的解決方法,涉及對(duì)MVC中表單元素屬性的應(yīng)用技巧,需要的朋友可以參考下
    2014-11-11

最新評(píng)論

靖江市| 科尔| 东兴市| 垣曲县| 兴安盟| 商城县| 石门县| 灵山县| 清流县| 利津县| 永康市| 阿荣旗| 读书| 乡城县| 神农架林区| 临颍县| 枞阳县| 信丰县| 武强县| 依兰县| 广南县| 南通市| 湟源县| 丹江口市| 吉林省| 宁南县| 普兰店市| 华亭县| 依安县| 湟源县| 双鸭山市| 肃宁县| 永春县| 华蓥市| 昭苏县| 涟水县| 广汉市| 兰州市| 满洲里市| 永修县| 龙山县|