在一个页面中使用一次usercontrol会出现名称冲突问题

时间:2011-12-13 19:53:22

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

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

usercontrol中的html元素也会显示相同的ID,这使得getElementById无法在javascript中运行

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

1 个答案:

答案 0 :(得分:6)

为了避免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";
    }
    ...
}