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

标签 c# asp.net .net-3.5

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

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

我遇到的问题是,当我尝试引用 AssociatedControlID 以便将标签绑定(bind)到输入时,我得到了一个:

 <label for="controlID">

我想要的地方:

 <label for="controlID_inputID">

我试过:

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

但是 span 和 input 具有相同的 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。我还想避免注入(inject)代码块,例如:

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

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

最佳答案

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

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

关于c# - 如何修改 CompositeControl 的 ClientId,消除所述 ID 的呈现,而不影响 ChildControls?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15345818/

相关文章:

c# - phonegap 上的 Asp.net c# web 应用程序

c# - 是否可以在不在 web.config 中添加 maxRequestLength 的情况下流式上传大文件?

c# - 如何将数据集转换为强类型对象?

c# - 具有多个约束的通用方法

c# - 任何域对象都应该不可序列化吗?

c# - StringBuilder.AppendFormat 抛出异常

c# - 是否可以在不破坏二进制兼容性的情况下升级到 Generic IEnumerable

c# - 无法从使用中推断出 OrderBy 类型的问题

c# - WebApi 2.0 项目在哪里存储新用户(使用个人用户身份验证创建时)?

c# - EventSchemaTraceListener 的某些属性无法识别 app.config