• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 817
  • Last Modified:

Setting href of HtmlAnchor control (not in code-behind file)

I had the following regular html anchor tag defined in my user control.

<a href="<%=Request.ApplicationPath%>/Default.aspx">Home</a>

This works fine. Request.ApplicationPath evaluates and all is good.

However, if I define it as runat="server" like this:

<a id="HomeANC" runat="server" href="<%=Request.ApplicationPath%>/Default.aspx">Home</a>

This results in the link pointing to "http://localhost/mywebapp/myusercontrolsfolder/<%=Request.ApplicationPath%>/Default.aspx".
Request.ApplicationPath no longer gets evaluated properly.

How the heck do I set the href without setting it in the Page_Load event handler?

0
mppeters
Asked:
mppeters
  • 4
  • 2
1 Solution
 
tusharashahCommented:
As far as I know that server tags cannot contain <% ... %> constructs.

-tushar
0
 
tusharashahCommented:
You can add a script block like following to set property of HRef dynamically..

----------------------------------------------------------------------
<script runat="server">
      public void Page_Load()
      {
            HomeANC.HRef= Request.ApplicationPath + "/Default.aspx";
      }
</script>
----------------------------------------------------------------------
(this code is cAsE sensitive)

-tushar
0
 
tusharashahCommented:
You can read more on Inline Code here:

http://www.sitepoint.com/article/asp-dot-net-basics

-tushar
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
mppetersAuthor Commented:
>> As far as I know that server tags cannot contain <% ... %> constructs.

Sure they can.
Example:
<asp:Image Runat="server" Visible='<%# Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "IsActive")) %>' ImageUrl="_images/check.gif" ID="ActiveIMG" />

It seems that the HtmlAnchor control does not support inline code. Though a regular html <a> tag without runat="server" works fine. Seems like a bug or an oversight. The only usecase supported is setting the Href attribute through non-inline code. Even calling Page.DataBind() in the Page_Load event handler does not evaluate the inilne code properly.

I'm sorry tusharashah, I should have been more specific. I don't want to say HomeANC.HRef= Request.ApplicationPath + "/Default.aspx";
I want to say href=" <<Request.ApplicationPath value>> + "/Default.aspx" ".

0
 
tusharashahCommented:

----------------------------------------------------------------------------------------------------------------------------------
<%@ Page language="c#" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 

<html>
  <head>
    <title>test3</title>
    <script runat="server">
      public void Page_Load()
      {
            HomeANC.HRef= Request.ApplicationPath + "/Default.aspx";
      }
    </script>
 </head>
  <body MS_POSITIONING="GridLayout">
      
    <form id="Form1" method="post" runat="server">
      <a id="HomeANC" runat="server">Home</a>
     </form>
      
  </body>
</html>
----------------------------------------------------------------------------------------------------------------------------------
This code works,
But, is this what you want?

-tushar
0
 
mppetersAuthor Commented:
Sorry no, it's not what I'm looking for.

I was looking to do something like:
<a id="HomeANC" runat="server" href="<%=Request.ApplicationPath%>/Default.aspx">Home</a>

But it turns out that this does not work.

What I've gone with instead is:
<asp:hyperlink id="HomeLNK" runat="server" navigateurl="~/Default.aspx" />

Also, the following would work:
<asp:hyperlink id="TrHomeLNK" runat="server" navigateurl='<%# Request.ApplicationPath + "/Default.aspx"%>' />
But in the Page_Load you must include: Page.DataBind()
0
 
RomModCommented:
The question has been PAQ'd and the 125 points have been refunded.
RomMod
Community Support Moderator
0

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now