0

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

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.

请帮助

4

3 回答 3

3

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

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

UriBuilder 在您的情况下将协议 (HTTP) 添加到您正在加载的 URL 中,并使用完整的 URL 初始化 Uri 类的实例。使用 AbsoluteUri 属性。

对于更复杂的情况,您可以使用 Regex :

        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);
        }
于 2013-06-28T10:10:53.327 回答
1

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

于 2013-06-28T08:50:52.013 回答
0

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

希望有帮助

于 2013-06-28T08:43:44.777 回答