2013-06-28 133 views
0

我有一个ASP:超链接在aspx页面,我设置动态文本和导航网址,但是当页面呈现时,它会在呈现的href中添加我网站的相对路径。我不知道为什么?asp:超链接导航url添加相对路径到url

ASPX

<asp:HyperLink runat="server" ID="charityNameText"></asp:HyperLink> 

代码隐藏(页加载事件)

//Getting data from database 

charityNameText.Text = entryDetails.RegisteredCharityName; 
charityNameText.NavigateUrl = "www.facebook.com"; 
charityNameText.Target = "_blank"; 

渲染HTML

<a id="ctl00_PageContent_CompetitionsEntries_ctl06_charityNameText" href="../../ConLib/Custom/www.facebook.com" target="_blank">save the childrens</a> 


../../ConLib/Custom/ is the path where this file is located. 

Plase帮助

回答

3

有你的情况下,不同的解决方案。 我最好的办法是使用System.UriBuilder类。

String myUrl = "www.facebook.com"; 
UriBuilder builder = new UriBuilder(myUrl); 
charityNameText.NavigateUrl = builder.Uri.AbsoluteUri; 

的UriBuilder添加协议(HTTP),你的情况给您加载的URL并初始化完整的URL Uri类的一个实例。使用AbsoluteUri属性。

对于更复杂的情况下,你可以使用正则表达式:

 String myUrl = "www.facebook.com"; 
     System.Text.RegularExpressions.Regex url = new System.Text.RegularExpressions.Regex(@"/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/", System.Text.RegularExpressions.RegexOptions.IgnoreCase); 

     System.Text.RegularExpressions.MatchCollection matches = url.Matches(myUrl); 

     foreach (System.Text.RegularExpressions.Match match in matches) 
     { 
      string matchedUrl = match.Groups["url"].Value; 
      Uri uri = new UriBuilder(matchedUrl).Uri; 
      myUrl = myUrl.Replace(matchedUrl, uri.AbsoluteUri); 
     } 
+0

我会尝试这个......但我在很多页面中使用HyperLink,我使用response.redirect并且似乎没有任何问题。是因为我正在使用数据库中的数据吗? –

+0

是的.....我使用了通过使用UriBuilder构建URL的简单方法,并且所有内容都按预期工作...... –

+1

当我使用UriBuilder构建网址时,一切都正常工作... –

0

我认为你应该使用http://www.facebook.com

希望帮助

+0

以及我所提到的www.facebook.com测试的目的。其实我从数据库获取数据并在那里设置URL。 –

1

您必须将协议添加到URL的开头: http://wwww.facebook.com

+0

以及我已经提到www.facebook.com作为测试目的。其实我从数据库获取数据并在那里设置URL。 –