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