明确将链接视为绝对链接?

时间:2011-06-01 05:02:09

标签: c# asp.net html navigation

我在我的一个页面上有一个控件,它接受一些用户输入(URL)并允许用户测试链接。

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("URL") %>' Target="_blank">Click here to test link</asp:HyperLink>

问题是,如果用户输入网址“google.com”,则该链接将被视为“http://localhost/google.com”。我必须把“http://www.google.com”放到正确的位置。

在所有情况下都可以将链接视为绝对链接吗?

4 个答案:

答案 0 :(得分:4)

试试这个......

NavigateUrl='<%# Eval("URL", "http://{0}") %>'

修改:如果您想要添加检查它是否已包含http://那么它应该是...

NavigateUrl=<%# Eval("URL").ToString().Contains("http://") == true ? Eval("URL") :
 "http://" + Eval("URL")  %>

答案 1 :(得分:3)

这是学术性的问题还是你有问题需要解决?

首先,http://www.google.com是正确的位置且http://localhost/google.com不正确的概念非常错误。

我看到的问题是这个。
从数据源中提取URL时,ASP.NET Framework会将原始URL识别为相对URL。但是你希望他们使用他们的绝对uri。

但问题不在于框架,因为http://localhost/google.com可能是有效的网址 网站builtWith就是一个很好的例子。它具有有效的网址,例如http://builtwith.com/facebook.com

所以,问题出在你输入数据的地方。为什么你不能放置一个小组合,以便用户可以轻松添加协议,然后将URL添加到它,如下所示?

A small example of the UI

希望这有帮助。

答案 2 :(得分:2)

根据您的意见:

  

如果它是安全(https)站点或FTP站点会怎样?

  

那会有用吗?如果输入中已有http怎么办?如果它是安全(https)站点或FTP站点怎么办?

  

问题是,如果用户输入网址“google.com”,则该链接将被视为“http://localhost/google.com”。我必须把“http://www.google.com”放到正确的位置。

     

在所有情况下都可以将链接视为绝对链接吗?

你要求魔法。我们这里并不专注于魔法。您必须指定某些,它可以让您知道它可以成为特定类型的域。告诉他们,如果他们没有指定你将作为http://的协议,剩下的时间由他们来指定协议。这就是你所能做的一切。

至于确定它是否有协议,请检查string.Contains("://"),因为这是浏览器要做的事情,或多或少。

答案 3 :(得分:1)

在您的代码隐藏中,检查用户输入是否包含“http://”,如果不包含则附加。您也可以使用JavaScript来执行此操作。