我在我的一个页面上有一个控件,它接受一些用户输入(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”放到正确的位置。
在所有情况下都可以将链接视为绝对链接吗?
答案 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添加到它,如下所示?
希望这有帮助。
答案 2 :(得分:2)
根据您的意见:
如果它是安全(https)站点或FTP站点会怎样?
和
那会有用吗?如果输入中已有
http
怎么办?如果它是安全(https)站点或FTP站点怎么办?
和
问题是,如果用户输入网址“google.com”,则该链接将被视为“http://localhost/google.com”。我必须把“http://www.google.com”放到正确的位置。
在所有情况下都可以将链接视为绝对链接吗?
你要求魔法。我们这里并不专注于魔法。您必须指定某些,它可以让您知道它可以成为特定类型的域。告诉他们,如果他们没有指定你将作为http://的协议,剩下的时间由他们来指定协议。这就是你所能做的一切。
至于确定它是否有协议,请检查string.Contains("://")
,因为这是浏览器要做的事情,或多或少。
答案 3 :(得分:1)
在您的代码隐藏中,检查用户输入是否包含“http://”,如果不包含则附加。您也可以使用JavaScript来执行此操作。