我有一个派生自WebControls.TableCell的类。 设置Text属性后,我调用一个方法,动态地将asp:Panels和asp:LiteralControls添加到Cell。我想在Javascript中引用这些控件,所以我自然而然地尝试在JS函数中使用面板的ClientId。但是,这些控件没有设置ClientId(字符串为空)。为什么是这样?如何强制设置ClientId?
作为临时解决方案,我将ClientIDMode设置为" static"并且我自己创建了ID,但这并不令人满意,因为在JS中引用这些ID很困难。为什么?例如,如果指定" 12345"对于一个控件,它在客户端被更改为类似" MainContent_123456"。这很糟糕,因为"主要内容"部分不固定;因此,我永远不知道客户端的真实身份是什么。目前,我可以使用$ctrl = $('[id$='12345']');
获取jQuery控件,但这很脏,因为它会得到任何具有' 123456'在它的身份。
那么,回到最初的问题:如何在我的自定义TableCells中为我的面板自动设置我的ClientIds?
编辑:已添加代码
protected void Page_Load(object sender, EventArgs e)
{
this.ClientIDMode = System.Web.UI.ClientIDMode.Static;
}
将控件添加到自定义TableCell的方法中的代码:
Panel remainingTextPanel = new Panel();
remainingTextPanel.ID = Guid.NewGuid().ToString();
remainingTextPanel.Style["display"] = "none";
LiteralControl remainingText = new LiteralControl(myText.Substring(initialStringLength, myText.Length - initialStringLength));
remainingTextPanel.Controls.Add(remainingText);
this.Controls.Add(remainingTextPanel);
Panel linkBtnPanel = new Panel();
LinkButton lnkBtn = new LinkButton() {Text = "...", OnClientClick = "toggleDynamicText('" + remainingTextPanel.ID + "'); return false;" };
lnkBtn.Font.Bold = true;
linkBtnPanel.Controls.Add(lnkBtn);
this.Controls.Add(linkBtnPanel);
和JS代码:
function toggleDynamicText(id) {
$ctrl = $('[id$=' + id + ']');
$(document).ready(function () {
$ctrl.toggle(1000);
});
}
答案 0 :(得分:0)
如果没有看到任何代码,很难说出发生了什么,但是使用jQuery访问控件可以执行以下操作:
$("#<%=myElement.ClientID%>")
这样,.NET分配的ID无关紧要。