2012-03-31 81 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