我想修改NavigateUrl
控件的Hyperlink
属性。我需要保留查询字符串,但更改超链接URL的路径。
这些方面的东西:
var control = (Hyperlink) somecontrol; // e.g., control.NavigateUrl == "http://www.example.com/path/to/file?query=xyz" var uri = new Uri(control.NavigateUrl); uri.AbsolutePath = "/new/absolute/path"; control.NavigateUrl = uri.ToString(); // control.NavigateUrl == "http://www.example.com/new/absolute/path?query=xyz"
Uri.AbsolutePath
是只读的(no setter defined),因此此解决方案无效。
如何在保留查询字符串,主机名和架构部分的同时更改Hyperlink
的{{1}}属性的路径?
答案 0 :(得分:2)
您可能会发现UriBuilder课程很有用:
var oldUrl = "http://www.example.com/path/to/file?query=xyz";
var uriBuilder = new UriBuilder(oldUrl);
uriBuilder.Path = "new/absolute/path";
var newUrl = uriBuilder.ToString();
或者使它更通用:
public string ChangePath(string url, string newPath)
{
var uriBuilder = new UriBuilder(url);
uriBuilder.Path = newPath;
return uriBuilder.ToString();
}
然后:
var control = (Hyperlink) somecontrol;
control.NavigateUrl = ChangePath(control.NavigateUrl, "new/absolute/path");
答案 1 :(得分:0)
您可以在第一个问号处拆分字符串,然后将新域连接起来。