在C#中仅修改Hyperlink的NavigateUrl的路径部分

时间:2011-03-11 17:33:40

标签: c# .net-3.5

我想修改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}}属性的路径?

2 个答案:

答案 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)

您可以在第一个问号处拆分字符串,然后将新域连接起来。