如何修改CompositeControl的ClientId,消除所述ID的呈现,而不会影响ChildControls?

时间:2013-03-11 18:25:57

标签: c# asp.net .net-3.5

我有一个复合控件呈现:

<span id="controlID">
   <span id="controID_propertyID">
   <input id="controID_inputID">

我遇到的问题是当我尝试引用AssociatedControlID以便将标签绑定到输入时,我结束了:

 <label for="controlID">

我想要的地方:

 <label for="controlID_inputID">

我试过了:

    public override string ClientID
    {
        get
        {
            return _input.ClientID;
        }
    }

但是跨度和输入具有相同的ID。

<span id="controID_inputID">
   <span id="controID_propertyID">
   <input id="controID_inputID">

然后我尝试了:

    public override void RenderBeginTag(HtmlTextWriter writer)
    {
        writer.RenderBeginTag(HtmlTextWriterTag.Span);
    }

    public override void RenderEndTag(HtmlTextWriter writer)
    {
        writer.RenderEndTag();
    }

但是这也是我想要的属性跨度的唯一性。

<span>
   <span id="propertyID">   // I still want:  <span id="controlID_propertyID">
   <input id="controID_inputID">

有没有办法可以实现我想要的,而无需将CompositeControl切换为WebControl。我还想避免注入像:

这样的代码块
 <label for="<%=control.ClientID%>_input">

或通过代码隐藏,文字或诸如此类的任何类似解决方法。

1 个答案:

答案 0 :(得分:0)

考虑更改您的控件的ClientIDMode - 可以选择使子控件的ID“可预测”。 http://msdn.microsoft.com/ru-ru/library/system.web.ui.control.clientidmode(v=vs.100).aspx

还有一件事:使用AssociatedControlID,你在这里传递哪个控件?看起来你正在传递父母本身,而不是孩子。