我想通过格式化常规字符串,然后将其附加到当前查询字符串中,将多个查询字符串键值对添加到url中。因为据我所知,无法更改实际的Request.QueryString。因此,我尝试按如下所示将kvp:s附加到查询字符串。我已经搜索了StackOverflow,但是找不到与我的问题匹配的答案。
protected void ServiceSelectionChanged(object sender, EventArgs e)
{
var regNr = registrationNumber.Text;
var selectedServiceType = SelectedServiceType.ToString("D");
string url = string.Empty;
BookingHelpers.FormatQueryStringUrl(this.Request, "serviceType", selectedServiceType, ref url);
BookingHelpers.FormatQueryStringUrl(this.Request, "regNr", regNr, ref url);
Server.Transfer(url, false);
}
public static void FormatQueryStringUrl(HttpRequest request, string key, string value, ref string url)
{
if (string.IsNullOrEmpty(url))
{
url = request.Url.PathAndQuery;
}
if (url.Contains("?"))
{
if (url.Contains("&" + key))
{
string currentValue = request.QueryString[key];
url = url.Replace("&" + key + "=" + currentValue, "&" + key + "=" + value);
}
else
{
url = String.Format(request.Url.PathAndQuery + "&" + key + "={0}", value);
}
}
else url = String.Format(request.Url.PathAndQuery + "?" + key + "={0}", value);
}
但是,这每次都使用Request.QueryString,因此第一个kvp被覆盖。所以我的问题是:如何使这项工作有效,以便可以将两个键值对都附加到查询字符串?
我找到了有关堆栈溢出的答案,该答案对我有帮助:
虽然,我还需要检查url中是否已包含查询字符串,所以我将其修改为如下所示。
public static string ToQueryString(string url, NameValueCollection nvc)
{
StringBuilder sb;
if (url.Contains("?"))
sb = new StringBuilder("&");
else
sb = new StringBuilder("?");
bool first = true;
foreach (string key in nvc.AllKeys)
{
foreach (string value in nvc.GetValues(key))
{
if (!first)
{
sb.Append("&");
}
sb.AppendFormat("{0}={1}", Uri.EscapeDataString(key), Uri.EscapeDataString(value));
first = false;
}
}
return url + sb.ToString();
}
用法改为:
var queryParams = new NameValueCollection()
{
{ "isaServiceType", selectedIsaServiceType },
{ "regNr", regNr }
};
var url = ToQueryString(Request.Url.PathAndQuery, queryParams);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句