Solved

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

Posted on 2004-10-04
8
796 Views
Last Modified: 2009-07-29
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
Comment
Question by:mppeters
  • 4
  • 2
8 Comments
 
LVL 18

Expert Comment

by:tusharashah
ID: 12216524
As far as I know that server tags cannot contain <% ... %> constructs.

-tushar
0
 
LVL 18

Expert Comment

by:tusharashah
ID: 12216624
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
 
LVL 18

Expert Comment

by:tusharashah
ID: 12216703
You can read more on Inline Code here:

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

-tushar
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 8

Author Comment

by:mppeters
ID: 12217730
>> 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
 
LVL 18

Expert Comment

by:tusharashah
ID: 12217895

----------------------------------------------------------------------------------------------------------------------------------
<%@ 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
 
LVL 8

Author Comment

by:mppeters
ID: 12219405
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
 

Accepted Solution

by:
RomMod earned 0 total points
ID: 12411496
The question has been PAQ'd and the 125 points have been refunded.
RomMod
Community Support Moderator
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this Article, I will provide a few tips in problem and solution manner. Opening an ASPX page in Visual studio 2003 is very slow. To make it fast, please do follow below steps:   Open the Solution/Project. Right click the ASPX file to b…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…

685 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question