Sabemos que o .NET cria IDs muito estranhos após a compilação, e isso acaba atrapalhando na hora de usar o ID no javascript por exemplo.
Na versão 3.5 ou anterior do .NET Framework, podemos resgatar o ID utilizando o <%= txtNome.ClientID%>.
Mas com a chegada do .NET Framework 4 isso ficou um pouco mais simples, basta adicionar o ClientIDMode="Static" como no exemplo abaixo.
<asp:TextBox ID="txtNome" ClientIDMode="Static" runat="server" />
Resultado:
<input name="txtNome" type="text" id="txtNome" />
Para forçar ID estático para toda a aplicação é simples, basta adicionar apenas uma linha de código no web.config.
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation targetFramework="4.0" debug="true"/>
<pages clientIDMode="Static" ></pages>
</system.web>
</configuration>
Mas cuidado, pois isso pode se tornar um problema quando formos utilizar um Repeater por exemplo, pois ele criará vários IDs iguais, veja no exemplo abaixo onde o repeater tem um TextBox que repete por 2 vezes.
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:TextBox runat="server" id="txtNome" />
</ItemTemplate>
</asp:Repeater>
O resultado são vários IDs iguais:
<input name="Repeater1$ctl00$txtNome" type="text" id="txtNome" />
<input name="Repeater1$ctl01$txtNome" type="text" id="txtNome" />