【问题标题】:Asp.net Custom Table Cell ClientID not setAsp.net 自定义表格单元 ClientID 未设置
【发布时间】:2014-07-04 05:56:55
【问题描述】:

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

作为一个临时解决方案,我将 ClientIDMode 设置为“静态”并自己创建了 ID,但这并不令人满意,因为在 JS 中很难引用这些 ID。为什么?例如,如果您将“12345”分配给一个控件,它会在客户端更改为“MainContent_123456”之类的内容。这很糟糕,因为“MainContent”部分不固定;因此我永远无法确定客户端的真实 ID 是什么。目前,我可以使用 jQuery 使用$ctrl = $('[id$='12345']'); 来获取控件,但这很脏,因为它会获取任何 ID 中包含“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);
});

}

【问题讨论】:

  • 当 ClientIDMode 为静态时,它不会将“MainContent_”添加到您的 ID。这就是为什么它被称为静态的,因为它不会改变你分配给它的 ID。
  • 我认为确实如此,因为这就是 Firebug 在客户端显示的内容。我在 Page_Load 中将 ClientIDMode 设置为静态,然后手动将控件的“ID”属性设置为随机字符串。在客户端,添加了“MainContent”部分,出于什么原因。
  • 您使用的是什么版本的 .NET?
  • 版本为 .NET 4.5。我认为最重要的问题是为什么我的自定义表格单元格(以及添加到其中的控件)在动态添加到页面时没有分配任何 ClientId。

标签: c# javascript asp.net clientid asp.net-customcontrol


【解决方案1】:

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

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

这样,.NET 分配什么作为 ID 就无关紧要了。

【讨论】:

  • 这个线程的重点是“myElement.ClientID”没有设置(应该这样)......
  • 控件的ID属性不会自动设置,必须自己设置。完成此操作后,还应设置 ClientID 属性。
  • 也许如果您展示几行代码,那么我可能会为您提供更好的帮助。将它们添加到您的原始帖子中。
  • 完成。如果在设置 ID 字段后设置了 ClientId,我还没有尝试过;毕竟这可能是问题所在。
  • 我已经试过了,问题依旧。即使我将 ClientIDMode 设置为默认设置 (AutoID) 并将值分配给控件的“ID”属性,ClientID 仍然为空。在客户端,ID 类似于“MainContent_”。
猜你喜欢
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多