2

找到了具有相同 ID 'xxxx' 的多个控件。FindControl 要求控件具有唯一的 ID。

我想绕过这个验证。我想为多个元素使用相同的 id。我正在创建动态控件,并且我的 css 类是基于 id 和类组合应用的。页面第一次加载时一切正常,但在页面回发时出现此错误。

我可以做些什么来绕过这个验证吗?

4

4 回答 4

4

在 HTML 中,不能有多个具有相同 ID 的元素。听起来更合乎逻辑的是,您将 CSS 重写为不基于 ID。

于 2013-06-07T11:28:12.380 回答
2

你不能,ASP 需要唯一的 ID。否则怎么知道在代码中引用哪个控件?

例如

string x = NameBox.Text;

那么,如果你有 20 个内容不同的内容,你会使用哪一个?

我建议你重写你的 CSS 以不基于 ID,也许遵循 Harry Roberts 的哈希类方式?

于 2013-06-07T11:29:11.780 回答
2

在一个公共 NamingContainer 中不能有多个具有相同服务器 ID 的元素。
如果您真的想拥有相同的服务器 ID,请将您的控件放在单独的 NamingContainer(RepeaterItem?)中。

现在,如果您需要相同的 Html/DOM ID,您就不能拥有它。
从 CSS 的角度来看,使用 Id 以外的其他内容来区分您的元素。
不过,您可以使用部分匹配的 ID...

*[id*="_MyButtonID"].red {
    background-color: red;
}
于 2013-06-07T11:38:10.660 回答
1

为什么不使用您为控件提供多个类而不是依赖 ID?尝试使用具有相同 ID 的控件确实行不通。

例如:

<asp:TextBox id="textFirstName" runat="server" CssClass="name firstname" />
<asp:TextBox id="textLastName" runat="server" CssClass="name lastname" />

然后,在您的 CSS 中,您可以使用诸如.name.firstname之类的选择器来选择具有 name 和 firstname 类的元素

注意- 类名.name.firstname之间没有空格。

于 2013-06-08T15:16:02.207 回答