UserControl呈现:将链接写到当前页面?
时间:2020-03-05 18:48:39 来源:igfitidea点击:
我正在实现一个自定义控件,在此控件中,我需要编写一堆指向当前页面的链接,每个链接都有一个不同的查询参数。我需要保持现有查询字符串不变,并添加(或者修改的值)额外的查询项(例如"页面"):
"Default.aspx?page=1" "Default.aspx?page=2" "Default.aspx?someother=true&page=2"
等等。
有没有我可以在Render方法中使用的简单辅助方法... uhmm ...如:
Page.ClientScript.SomeURLBuilderMethodHere(this,"page","1"); Page.ClientScript.SomeURLBuilderMethodHere(this,"page","2");
这将负责生成正确的URL,维护现有的查询字符串项,而不创建重复项,例如。 page = 1&page = 2&page = 3?
汇总我自己的内容似乎是一项艰巨的任务。
解决方案
回答
恐怕我不知道有任何内置方法,我们使用此方法接受查询字符串并设置参数
/// <summary> /// Set a parameter value in a query string. If the parameter is not found in the passed in query string, /// it is added to the end of the query string /// </summary> /// <param name="queryString">The query string that is to be manipulated</param> /// <param name="paramName">The name of the parameter</param> /// <param name="paramValue">The value that the parameter is to be set to</param> /// <returns>The query string with the parameter set to the new value.</returns> public static string SetParameter(string queryString, string paramName, object paramValue) { //create the regex //match paramname=* //string regex = String.Format(@"{0}=[^&]*", paramName); string regex = @"([&?]{0,1})" + String.Format(@"({0}=[^&]*)", paramName); RegexOptions options = RegexOptions.RightToLeft; // Querystring has parameters... if (Regex.IsMatch(queryString, regex, options)) { queryString = Regex.Replace(queryString, regex, String.Format("{0}={1}", paramName, paramValue)); } else { // If no querystring just return the Parameter Key/Value if (queryString == String.Empty) { return String.Format("{0}={1}", paramName, paramValue); } else { // Append the new parameter key/value to the end of querystring queryString = String.Format("{0}&{1}={2}", queryString, paramName, paramValue); } } return queryString; }
显然,我们可以使用URI对象的QueryStringNameValueCollection
属性使查找值更加容易,但是我们希望能够解析任何查询字符串。
回答
哦,我们也有这种方法,它允许我们放入整个URL字符串,而不必从中获取查询字符串。
public static string SetParameterInUrl(string url, string paramName, object paramValue) { int queryStringIndex = url.IndexOf("?"); string path; string queryString; if (queryStringIndex >= 0 && !url.EndsWith("?")) { path = url.Substring(0, queryStringIndex); queryString = url.Substring(queryStringIndex + 1); } else { path = url; queryString = string.Empty; } return path + "?" + SetParameter(queryString, paramName, paramValue); }