2012-03-31 79 views
0

如果在頁面在瀏覽器中呈現時將我的控件(如Button)放入ContentPage(由MasterPage繼承)內部<asp:Content></asp:Content>中,我堅持使用此動態控件ID生成,控件ID被改變,我讀ScottGu article on 'clientIDMode',我想我的問題是在,所以我設置「的ClientIDMode」內部「的Web.Config」ContentPage的動態控制ID生成

<pages clientIDMode="Static"></pages> 

但問題仍然存在,我無法從代碼是指我的控件後面像這樣,

 //ctl00$Cntnt$Button1 name works but its dynamically created 
     if (ScriptManager1.AsyncPostBackSourceElementID == "Button1") 
     { 
      Label1.Text = "Async PostBack occured @ " + DateTime.Now.ToLongTimeString(); 
     } 

ASP.net標記:

<asp:Button ID="Button1" runat="server" Text="Refresh me" onclick="Button1_Click" /> 

瀏覽器端標記:

<input type="submit" name="ctl00$Cntnt$Button1" value="Refresh me" id="Button1" /> 

Q)我不能只使用的,我在標記指定控件ID(如如果我沒有任何MasterPage)?

PS:在AsyncPostback我想在此基礎上提出AsyncPostback,這樣做,我必須從AsyncPostBackSourceElementID不幸的回報修改控件ID

+1

讓ASP.NET處理命名有什麼問題?您仍然可以通過您指定的ID引用控件,即'Label1'。 – 2012-03-31 17:58:39

+0

@JamesJohnson但我不能引用Button1的原始名稱..! – 2012-03-31 18:15:33

+1

我想你可能會誤解'ClientIDMode =「Static」'的用途。由ASP.NET生成的ID僅適用於客戶端。在代碼隱藏中,您可以通過在標記中分配給它的標識來引用控件。如果這沒有發生,那麼你有另一個問題。 – 2012-03-31 18:19:51

回答

1

檢查值的特定按鍵來執行某些操作的ClientIDMode沒有關係,因爲AsyncPostBackSourceElementID實際上是返回按鈕的名稱而不是ID。然而,你可以很容易地通過UniqueID屬性來獲取按鈕的名稱:

if (ScriptManager1.AsyncPostBackSourceElementID == Button1.UniqueID) 
{ 
    //do whatever 
} 

我想你誤解的ClientIDMode目的。 ASP.NET生成的ID應用於客戶端,在代碼隱藏中,仍然可以通過標記中分配給它們的ID來訪問控件。

<asp:Panel ID="Panel1" runat="server"> 
    <asp:Label ID="Label1" runat="server" /> 
</asp:Panel> 

當這個被渲染,唯一標識符(客戶端ID)將被用於使用您所指派的ID的組合,並且任何方興未艾命名容器的ID每個控制產生。在這種情況下Panel1是命名容器,所以生成的ID是:

<span id="ctl00_Panel1_Label1"></span> 

然而,在代碼隱藏,你仍然可以通過你分配給它的原始ID訪問控制:

var labelText = Label1.Text; 

生成的ID僅在客戶端發揮作用,例如,您可能需要從JavaScript訪問控件;你可以通過ClientID找到它。

var labelText = document.getElementById("<%=Label1.ClientID%>").innerText; 
+0

感謝您的答覆,但這不是我要求,我已更新我的問題進行澄清。 – 2012-03-31 18:29:29

+0

Button1.ClientID返回「Button1」,AsyncPostBackSourceElementID返回ctl00 $ Cntnt $ Button1,這不起作用:/ – 2012-03-31 18:34:57

+0

這是因爲你已將'ClientIDMode'設置爲'Static'。它看起來像返回按鈕的名稱,您可以使用控件的UniqueID屬性訪問該按鈕。 – 2012-03-31 18:38:43