如何为用户控件内的控件生成唯一 ID
本文关键字:控件 唯一 ID 用户 | 更新日期: 2023-09-27 18:34:08
我有一个用户控件,其中我有一个标签。
<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。如何生成它?
始终有效的选项是:Guid.NewGuid :)
你可以尝试这样的事情:
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]++;
}
更高级的解决方案可能是使用命名容器。