3

我有一个呈现的复合控件:

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

但这也扼杀了我想要的 Property Span 的唯一性。

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

有没有一种方法可以实现我想要的,而无需将 CompositeControl 切换为 WebControl。我还想避免注入代码块,例如:

 <label for="<%=control.ClientID%>_input">

或者通过代码隐藏、文字或诸如此类的任何类似的变通方法。

4

1 回答 1

0

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

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

于 2013-03-18T15:10:34.107 回答