在asp.net中如何设置客户端ID

10

是否可以设置任何asp.net服务器控件的ClientID? 我应该如何做到这一点?


1
请解释您想要实现的目标,然后我们可能能够建议一种替代方案。 - Dan Diplo
7个回答

20

好消息是,在VS 2010和.Net 4中,您将拥有完全控制客户端ID

对于当前版本的.Net仍然可以应付。我假设您需要JavaScript的ID。如果是这样,只需像这样获取ID:

<script type="text/javascript">
    var myTextBox = $('#<%=TextBox1.ClientID%>');
</script>

2
+1 是给那些像绝地武士一样能够读懂 ebattulga 的思维的人,"获取客户端ID我没有设置"。 - rick schott
2
不要忘记在<%= %>标签前加上#符号,以获取实际的DOM对象而不仅仅是控件ClientID的文本。 - KSwift87
1
谢谢@Kswift87,你说得完全正确。我已经更新了我的答案。 - Michael La Voie

4
我建议不要这样做,除非你确定想这样做,但有一种方法。你可以在服务器控件内覆盖 ClientID 属性。
public override string ClientID
{
    get { return "whatever"; }
}

但是正如其他人所指出的那样,你无法从外部进行操作。


3

这是不可能的。ClientID是由ASP.NET生成的。根据MSDN

ClientID值是通过将控件的ID值和其父控件的UniqueID值连接而生成的。如果未指定控件的ID值,则使用自动生成的值。


1

ASP.NET 4为每个控件都提供了ClientIDMode属性。

如果您想要完全关闭ClientID,您可以使用this trick - 它适用于任何非回发控件。


1

我认为在Visual Studio 2008中不可能实现。因为Control.ClientID属性只有获取方法

编辑:但在Visual Studio 2010(.Net 4.0)中是可能的


1
这怎么可能?在VS2015中,这个方法仍然只有get。 - FrenkyB

0

针对VS 2010,.NET 4.0:

如果您尝试设置ctrl.ClientID="stringID",您将会收到一个错误提示,指出ClientID是只读的。您可以使用ClientIDMode来控制ClientID的值 - 它定义了设置ClientID的算法:

ctrl.ID = "IDstring";
ctrl.ClientIDMode = ClientIDMode.Static;   //ClientID value is set to the value of ID

HTML标记将使用控件的ID标记控件的HTML。因此,您可以从代码后台对其进行某些程度的控制。


0

这是一个ASP.NET 4.0的特性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接