Hi Hurricane Hunia,
Syntax like this <%# is for databinding:
NavigateUrl='<%# this.SiteRoot + "/Iwi/registration_admin/registration_admin.aspx?mid=" + ModuleId + "&pageid=" + PageId %>'
to use that syntax I think you would then need to call
hl_search.DataBind();
or this.DataBind()
from your code behind. In the end it is probably just as convenient to set the navigate url from code.
I "think" you could also do it like this with the <%= (which is shorthand for Response.Write):
NavigateUrl='<%= this.SiteRoot + "/Iwi/registration_admin/registration_admin.aspx?mid=" + ModuleId + "&pageid=" + PageId %>'
Note also that you probably don't need to pre-encode the parameters like &pageid in this case because the NavigateUrl property will automatically url encode &pageid to &pageid
But really I think it is probably cleaner in the end to set the url from code like you did already.
Hope it helps,
Joe