我有一个带有一个标签的用户控件。
<asp:Label ID="lblProductionName"
runat="server"
Text="Production Name will come here">
</asp:Label>
我使用此函数从代码后面渲染给定的UC:
private string RenderControl(Control control)
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter writer = new HtmlTextWriter(sw);
control.RenderControl(writer);
return sb.ToString();
}
渲染后,将其作为输出字符串:
<span id="lblProductionName">Production Name will come here</span>
现在,当我放置同一用户控件的两个实例时,我在输出字符串中获得了相同的跨度ID。
我想为用户控件的两个实例生成两个不同的ID。我如何生成它?
最佳答案
您可以尝试如下操作:
private Dictionary<string, int> controlInstances = new Dictionary<string, int>();
private string RenderControl(Control control)
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter writer = new HtmlTextWriter(sw);
int index = GetOrAddControlInstanceCount(control);
control.ClientIDMode = ClientIDMode.Static;
control.ID = control.GetType().Name + index;
control.RenderControl(writer);
return sb.ToString();
}
private int GetOrAddControlInstanceCount(Control control)
{
string key = control.GetType().Name;
if (!controlInstances.ContainsKey(key))
{
controlInstances.Add(key, 0);
}
return controlInstances[key]++;
}
更高级的解决方案可能是使用NamingContainer。