【问题标题】:using one usercontrol twice in one page has name conflict problems在一页中使用一个用户控件两次存在名称冲突问题
【发布时间】:2011-12-13 19:53:21
【问题描述】:

我制作了一个具有 ValidationGroup 的登录控件。我在母版页中使用了此控件两次。但是,验证将检查这两个控件。我需要的是它只检查其包含控件中的字段...

用户控件中的 html 元素也会显示相同的 Id,这使得 getElementById 在 javascript 中不起作用

我想知道如何避免这种冲突?谢谢。

【问题讨论】:

标签: c# asp.net user-controls ascx


【解决方案1】:

为避免 ID 出现问题,您可以使您的控件实现 INamingContainer 接口。它是一个标记接口,它简单地告诉 ASP.NET 中的控件应该在其客户端 ID 中具有父 ID 前缀。更多信息here

至于 ValidationGroup,我看到了两个选项。首先 - 为您的控件定义一个公共属性。在标记中设置它(确保 Master 上的每个控件都不同)并在控件的 PreRender 处理程序中为每个验证器等以编程方式设置它。

public partial class MyLoginControl : Control
{
    ...
    public string ValidationGroup
    {
        get; set;
    }
    ...
    protected void Page_PreRender(object sender, EventArgs e)
    {
        RequredValidator1.ValidationGroup = this.ValidationGroup;
    }
    ...
}

第二种方法基本相同,但可以使用控件的ID代替公共属性:

public partial class MyLoginControl : Control
{
    ...
    protected void Page_PreRender(object sender, EventArgs e)
    {
        RequredValidator1.ValidationGroup = this.ID + "ValidationGroup";
    }
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2012-11-24
    相关资源
    最近更新 更多