我有一个呈现的复合控件:
<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/