Beh, certo che si può. Non c'entra che linguaggio lato server tu stia usando, per poter essere navigata la pagina viene sempre tradotta in markup/linguaggi comprensibili al browser, quindi html/xhtml, javascript, ecc.
Il problema che (credo) tu stia riscontrando riguarda il fatto che asp.net rinomina a runtime gli ID dei controlli lato server, ad esempio se scrivi
	codice:
	<asp:Label runat="server" ID="Label1"></asp:Label>
 
Ti ritrovi, a pagina in esecuzione con
	codice:
	<span id="ctl00_ContentPlaceHolder1_Label1"></span>
 
Se il tuo problema è questo, la soluzione è abbastanza semplice. Nelle tue funzioni javascript, non devi mai fare riferimento esplicito agli ID dei controlli. Se ad esempio hai una funzione che fa:
	codice:
	function test()
{
  var x = document.getElementById("Label1");
}
 
dovrai cambiarla con
	codice:
	function test(id)
{
  var x = document.getElementById(id);
}
 
Ora per passare l'id corretto alla funzione. Supponiamo che tu voglia eseguire questa funzione sul click di un link. Sarà sufficiente fare:
	codice:
	<asp:HyperLink runat="server" ID="HyperLink1" NavigateUrl="#" />
 
Poi dal codebehind, nel Page_Load, aggiungi
	codice:
	HyperLink1.Attributes.Add("onclick", "test('" + Label1.ID + "')");
 
In questo modo l'ID passato al javascript è quello corretto, perchè gia elaborato dal motore di Asp.net
Spero di esserti stato di aiuto, in caso contrario, chiedi pure 
Ciao