在一个页面中两次使用同一个用户控件会产生名称冲突问题

本文关键字:控件 用户 同一个 问题 冲突 两次 一个 | 更新日期: 2023-09-27 18:17:58

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

usercontrol中的html元素也将显示相同的id,这使得getElementById在javascript中不起作用

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

在一个页面中两次使用同一个用户控件会产生名称冲突问题

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

对于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";
    }
    ...
}