C# 如何修改CompositeControl的ClientId,消除对所述ID的呈现,而不影响ChildControls?
我有一个复合控件,可以呈现:C# 如何修改CompositeControl的ClientId,消除对所述ID的呈现,而不影响ChildControls?,c#,asp.net,.net-3.5,C#,Asp.net,.net 3.5,我有一个复合控件,可以呈现: <span id="controlID"> <span id="controID_propertyID"> <input id="controID_inputID"> 但是span和input具有相同的id <span id="controID_inputID"> <span id="controID_propertyID"> <input id="controID_inpu
<span id="controlID">
<span id="controID_propertyID">
<input id="controID_inputID">
但是span和input具有相同的id
<span id="controID_inputID">
<span id="controID_propertyID">
<input id="controID_inputID">
但这也破坏了我想要的属性Span的唯一性
<span>
<span id="propertyID"> // I still want: <span id="controlID_propertyID">
<input id="controID_inputID">
//我仍然想要:
是否有一种方法可以实现我想要的,而不必将CompositeControl切换为网络控件。我还希望避免注入代码块,如:
<label for="<%=control.ClientID%>_input">
或者通过代码隐藏、文本或其他类似的解决方法。考虑更改控件的ClientMode-可以选择使子控件的ID“可预测”。
还有一件事:使用AssociatedControlID,在这里传递哪个控件?看起来您传递的是父对象本身,而不是子对象。控件是如何定义的?如果看不到代码,我就帮不了你…@Ben public abstract class SaidControl:CompositeControl还需要其他细节吗?我可以根据需要重新定义它,但不能将其定义为网络控件。在RenderBeginTag的覆盖中,可以调用writer.AddAttribute来设置ID和其他属性。您应该提供CompositeControl类的代码,或者至少提供正在使用的标记。不清楚您正在使用什么以及如何使用。我正在返回子控件的ID:return\u input.ClientID;ClientMode看起来不错,但我也在使用3.5。这似乎是一项4.0+技术(是的,是的)也许可以尝试这样做:Control MyInput=MyCompositeControl.FindControl(“MyInputID”);返回MyInput.ClientID_输入是子控件,我似乎无法访问ClientMode。MSDN似乎没有为其他版本提供它。我也不想手动将ClientID从控件中拉出,我希望复合控件能够提供数据,这样标签就可以在标记vs pro语法中绑定。如果您想以某种方式将ClientID传递给标签,那么您现在必须知道ClientID。如我所见,有两种选择:1。您将ClientID属性传递给标签-这是您试图避免的事情,对吗?2.您可以查看呈现的标记,并确定您在浏览器中看到的ID就是您所需要的ID,所以只需将其放入asp.net标记的源代码中即可。第二种变体更糟糕,因为您实际上无法确定作为ClientID插入的字符串是否始终与实际字符串匹配。例如,您的网页可以转换为控件,也可以升级到.Net 4.0。
<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">
<label for="<%=control.ClientID%>_input">