Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未设置Asp.net自定义表格单元格ClientID_C#_Javascript_Asp.net_Clientid_Asp.net Customcontrol - Fatal编程技术网

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

C# 未设置Asp.net自定义表格单元格ClientID,c#,javascript,asp.net,clientid,asp.net-customcontrol,C#,Javascript,Asp.net,Clientid,Asp.net Customcontrol,我有一个从WebControl.TableCell派生的类。 设置Text属性后,我调用一个方法,该方法会将asp:Panels和asp:LiteralControls动态添加到单元格中。我想在Javascript中引用这些控件,所以我自然尝试在JS函数中使用面板的ClientId。但是,这些控件没有设置ClientId(字符串为空)。为什么会这样?如何强制设置ClientID 作为一个临时解决方案,我将clientdmode设置为“static”,并自己创建了ID,但这并不令人满意,因为在JS

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

作为一个临时解决方案,我将clientdmode设置为“static”,并自己创建了ID,但这并不令人满意,因为在JS中很难引用这些ID。为什么?例如,如果您将“12345”分配给一个控件,则它在客户端会更改为类似“MainContent_123456”的内容。这是不好的,因为“主要内容”部分是不固定的;因此,我永远无法确定客户端的真实Id是什么。目前,我可以使用jQuery使用
$ctrl=$('[id$='12345'])获取控件,但这是脏的,因为它将获得id中包含“123456”的任何控件

那么,回到原来的问题:如何在自定义TableCells中为我的面板自动设置ClientID

编辑:添加代码

 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);
});

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

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

这样,无论.NET将什么分配为ID都无关紧要。

当ClientIDMode是静态的时,它不会将“MainContent”添加到您的ID中。这就是为什么它被称为static,因为它不会更改您分配给它的ID。我认为它会更改,因为Firebug在客户端显示的就是这个。我在页面加载中将ClientIDMode设置为static,然后手动将控件的“ID”属性设置为随机字符串。在客户端,添加了“MainContent”部分,原因是什么。您使用的是.NET的哪个版本?版本是.NET 4.5。我认为最重要的问题是,为什么我的自定义表格单元格(以及添加到其中的控件)在动态添加到页面时没有分配任何ClientID。此线程的全部要点是没有设置“myElement.ClientID”(应该设置)…控件的ID属性不会自动设置,你必须设置它。一旦你这样做了,那么ClientID属性也应该被设置。也许如果你展示了几行代码,那么我可以更好地帮助你。将它们添加到原始帖子中。完成。如果在设置ID字段后设置了ClientId,我还没有尝试;这可能就是问题所在。我已经试过了,问题仍然存在。即使我将ClientIDMode设置为默认设置(AutoID)并为控件的“ID”属性赋值,ClientID仍然是空的。在客户端,ID看起来像“MainContent”。