c# - 在一页中使用同一个用户控件两次会出现名称冲突问题

标签 c# asp.net user-controls ascx

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

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

我想知道如何避免此类冲突?谢谢。

最佳答案

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

对于 ValidationGroup,我看到两个选项。首先 - 定义一个公共(public)属性供您控制。在标记中设置它(确保 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)属性:

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

关于c# - 在一页中使用同一个用户控件两次会出现名称冲突问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8495298/

相关文章:

c# - 在 Web 应用程序中传递用户信息的最佳方式是什么?

c# - WPF:在 UserControl 的构造函数中加载数据会破坏设计器

winforms - VS2010 Winforms Usercontrol 更改未显示在父窗体中

c# - 格式化日志的好方法是什么?

c# - 如何解决: "You need to add XmlChoiceIdentifierAttribute to the member." when using XmlAttributeOverrides?

c# - 我如何防止 Resharper 大量缩进 lambda?

c# - ASP.NET Web API 属性路由 : RoutePrefix with Route Parameter

asp.net - Application_Start 与 OnInit 与构造函数

asp.net - ASP.NET〜/无法解析为“/”

Asp.net session 变量混淆