【问题标题】:Create User Control is .Net without predictable ClientID Mode创建用户控件是 .Net,没有可预测的 ClientID 模式
【发布时间】:2015-03-16 21:44:09
【问题描述】:

我正在创建一个字段集用户控件,使其更易于在我的 Web 应用程序中使用。

但是,由于它是一个用户控件,它需要一个唯一的 ID 来创建控件和其中的子控件

我有一个 ASP 占位符控件,允许用户控件接受子控件,但创建了一个越来越长的 ClientID,因为这是标准的 .NET 编程,所以这并不是必需的。

有没有办法在我的用户控件中关闭这种自动引用,并且仍然保留字段集所在的父对象中的引用? (顺便说一句,它在母版页中......)

我要问的是 --- 有没有一种方法可以创建一个用户控件,而用户控件的子元素的 ID 不是基于父用户控件...我注意到 ASP UpdatePanel 具有这种能力并且想要复制相同的功能。

非常感谢您的反馈。

【问题讨论】:

    标签: c# asp.net vb.net user-controls naming-conventions


    【解决方案1】:

    有几种方法可以解决这个问题,4guysfromrolla 上有一个很好的资源

    但总的来说,您的一些选择是:-

    • 首先,您可以将所有客户端 ID 模式设为静态 - 请查看 ClientIDMode in web.config

    • 不要制作可预测的客户端 ID 模式,而是在代码中使用它们的 ID,例如

      var txt = document.getElementById('<%=TextBoxID.ClientID%>');

      因此,您将使用 ASP.NET 将客户端 ID 直接注入您的 HTML。

    • 将客户端 ID 覆盖为每个属性的静态 - 这是您可以在 .NET 中指定您希望客户端 ID 成为您正在使用的控制的地方。 <asp:TextBox ID="txtName" runat="server" ClientIDMode="Static" />

    希望这会有所帮助!

    【讨论】:

    • 我关注了这个网页,但实际上它似乎有点乱。我尝试使用 ClientID 和 ClientIDMode,但没有解决“更清洁”ClientID 的问题。另外,似乎“名称”属性在 HTML 中似乎根本没有改变
    • 如果我的命名容器是“m_c”并且有一个名为“f”的字段集用户控件,该控件和文本框的 ID 为 t,那么文本框的完整客户端 ID 应该是“m_c_t”,该字段集应该保持“透明”
    • 这是我切换到 MVC 系统以完全控制客户端的原因之一。我发现 web-forms 模型有点麻烦。
    猜你喜欢
    • 2011-02-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多