首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确保ScriptControl中元素的唯一ID属性

确保ScriptControl中元素的唯一ID属性
EN

Stack Overflow用户
提问于 2010-04-27 19:41:25
回答 3查看 1.1K关注 0票数 2

我正在基于ScriptControl创建一个控件,并且我正在像下面这样覆盖Render方法:

代码语言:javascript
复制
protected override void Render(HtmlTextWriter writer)
{
    RenderBeginTag(writer);

    writer.RenderBeginTag(HtmlTextWriterTag.Div);
    writer.Write("This is a test.");
    writer.RenderEndTag();

    RenderEndTag(writer);
}

我的问题是,如果我想为div分配一个ID属性,并使它在页面上是唯一的,即使我的控件有多个实例,该怎么办?

我见过其他人的代码是这样的:

代码语言:javascript
复制
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID + "_divTest");

这将防止在我的控件的实例之间命名冲突,但是如果我已经在页面的其他地方创建了一个具有相同ID的div怎么办?

我还听说过实现INamingContainer。这在这里适用吗?我怎么能用呢?

更新

我通过重写CreateChildControls和添加实际控件来解决这一问题,而不是直接呈现HTML。在这种情况下,INamingContainer完成了它的工作。但是,我仍然很好奇是否有一种方法来解决我原来的问题(直接呈现元素的唯一ID)。

EN

回答 3

Stack Overflow用户

发布于 2010-04-27 19:53:42

INamingController是一个标记接口。实现它将保证您对控件的每个实例都具有唯一的it。

http://msdn.microsoft.com/en-us/library/system.web.ui.inamingcontainer.aspx

代码语言:javascript
复制
  public class MyScriptControl: ScriptControl, INamingContainer {

  }
票数 0
EN

Stack Overflow用户

发布于 2010-05-12 20:01:08

您不希望仅仅为了获得唯一的in而创建控件的实例,在这种方法中存在无用的开销/复杂性。Control.ID属性可能不是唯一的,但Control.ClientID属性将是唯一的。因此

代码语言:javascript
复制
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID + "_divTest"); 

除非您在自定义控件中两次使用后缀"_divTest“,否则该属性必须是唯一的。

票数 0
EN

Stack Overflow用户

发布于 2010-05-12 22:19:18

我试着意识到你的问题:

代码语言:javascript
复制
public class SC : ScriptControl
{
    protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors()
    {
        return null;
    }
        protected override IEnumerable<ScriptReference> GetScriptReferences()
        {
            return null;
        }
    }
    //... Page code
        protected void Page_PreRender(object sender, EventArgs e)
        {
            var sc = new SC();
            var sc1 = new SC();
            Page.Form.Controls.Add(sc);
            Page.Form.Controls.Add(sc1);
        }

而sc和sc1有不同的ClientID。所以这不是ASP.NET问题。看看你的认识。可能是在将ScriptControls添加到页面之前为div生成id,也可能是尝试在一个ScriptControl的范围内创建2个div,或者是在异步偏置上动态地创建ScriptConrol2,并且它具有与ScriptControl1相同的id,而后者在回发时没有动态添加。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2724473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档