未设置Asp.net自定义表单元格ClientID

本文关键字:表单 单元格 ClientID 自定义 net 设置 Asp | 更新日期: 2023-09-27 18:03:39

我有一个类派生自WebControls.TableCell。设置Text属性后,我调用一个方法动态地将asp:Panels和asp:LiteralControls添加到单元格中。我想在Javascript中引用这些控件,所以很自然地,我尝试在JS函数中使用面板的ClientId。但是,这些控件没有设置ClientId(字符串为空)。为什么会这样?如何强制设置clientid ?

作为临时解决方案,我将ClientIDMode设置为"static"并自己创建id,但这并不令人满意,因为很难在JS中引用这些id。为什么?如果你分配,例如,"12345"到一个控件,它会在客户端被更改为"MainContent_123456"。这很糟糕,因为"MainContent"部分不是固定的;因此,我永远不知道客户端的真实Id是什么。目前,我可以用jQuery使用$ctrl = $('[id$='12345']');获得控件,但这是肮脏的,因为它会得到任何控件,在其id '123456'。

所以,回到原来的问题:我如何得到我的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);
});

}

未设置Asp.net自定义表单元格ClientID

在没有看到任何代码的情况下很难知道发生了什么,但是要使用jQuery访问您的控件,您可以执行以下操作:

$("#<%=myElement.ClientID%>")

这样就不用管。net赋值什么作为ID了。