我有一个搜索页面,允许用户根据特定集合中的条件进一步过滤他们的结果。
您可以通过搜索“标记”中的所有项目来开始搜索。为此创建的URL看起来像
搜索/索引?标签= TAGA
在页面上有一个标签列表,这些标签也在此结果集中。
我想要的是这个标签列表中生成的URL是
<a href="search/index?tag=TagA,TagB">TagB</a>
仅仅添加其他参数(例如页码和其他搜索条件)(仅为了简洁而未包含它们)仅仅附加到URL上是不够的。
我知道我可能在服务器端攻击这个,但没有什么感觉非常优雅,我想知道是否有一个整洁的解决方案。
这一切都是在ASP MVC中完成的,因此我有一个很好的简单局部视图来列出这些标签:
<%if(Model.Count()>0){ %>
<ul>
<%foreach(Tag t in Model){ %>
<li><%=t.name%></li>
<%} %>
</ul>
<%} %
有什么想法吗?
答案 0 :(得分:1)
这不是好看的代码,但它可能会给你一个想法:
public static string CurrentUrl
(this UrlHelper helper)
{
return GenerateUrl
(helper, GetParameters(helper), null, null);
}
public static string CurrentUrlWith
(this UrlHelper helper, string key, string value)
{
return GenerateUrl
(helper, GetParameters(helper), key, value);
}
private static Dictionary<string, object> GetParameters
(UrlHelper helper)
{
var context = helper.RequestContext.HttpContext;
var request = context.Request;
var parameters = new Dictionary<string, object>();
request.Form.CopyTo(parameters);
request.QueryString.CopyTo(parameters);
return parameters;
}
//TODO: refactor
private static string GenerateUrl
(UrlHelper helper, Dictionary<string, object> parameters,
string key, string value)
{
var context = helper.RequestContext.HttpContext;
var request = context.Request;
string query = "?",
url = request.FilePath;
foreach (var parameter in parameters)
if (parameter.Key != key)
query += string.Format("&{0}={1}",
helper.Encode(parameter.Key),
helper.Encode(parameter.Value.ToString()));
if (key != null && value != null)
query += string.Format("&{0}={1}", helper.Encode(key), helper.Encode(value));
if (query.Length > 1)
query = query.Remove(1, 1);
return url + query;
}
用法如下:
<a href="<%= Url.CurrentUrlWith("page", (Model.TotalPages).ToString())%>"
class="p-last">Last page</a>
如果您想要涉及javascript,可能需要查看this jQuery plugin。