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

もう 1 つ: AssociatedControlID を使用して、ここでどのコントロールを渡しますか? 子ではなく、親自体を渡しているようです。

于 2013-03-18T15:10:34.107 に答える