我正在构建一个MVC4应用程序来搜索wiki文档。一切正常,但我无法找出使分面可链接的最佳方法。
我在起始页上查看了各个方面,以便更轻松地找到您要查找的关键字:
var products = solr.Query(SolrQuery.All,
new QueryOptions {
Rows = 0,
Facet = new FacetParameters {
Queries = new[] { new SolrFacetFieldQuery("products") }
}
});
foreach(var facet in products.FacetFields["products"]) {
var catagoryFacet = new CategoryFacet(facet.Key, facet.Value);
facetProductList.Add(catagoryFacet);
}
然后我在视图中循环浏览列表,如下所示:
<h2> Products: </h2>
@foreach (var facet in Model)
{
foreach(var item in facet.products) {
<td><a href="http://localhost:5000/Home/FreeSearch?search=@Html.DisplayFor(ModelItem => item.Name)">@Html.DisplayFor(ModelItem => item.Name), @Html.DisplayFor(ModelItem => item.Count)</a></td> <br/>
}
但是使用这种方法,当用户单击链接时,发生的事情是我将facet的单词发送回控制器,因为我知道该关键字存在,因此对该关键字进行搜索。
我知道这是一种糟糕的方式,所以我试图找出一种更好的方法,并且由于我来自瑞典,如果我使用任何"åäö",链接就会断开。可以通过javascript处理,但它感觉非常丑陋,那么我怎样才能以更好的方式做到这一点呢?
我一直在查看过滤器查询,但如何使其可链接?
问候乔纳森
我只需将Url.Encode放在 Item.Name 上即可解决它。现在搜索工作了,如我所愿。
<h2> Products: </h2>
@foreach (var facet in Model)
{
foreach(var item in facet.ProductFacets) {
<td><a href="http://localhost:5000/Home/FreeSearch?search=@Url.Encode(item.Name)">@Html.DisplayFor(ModelItem => item.Name), @Html.DisplayFor(ModelItem => item.Occurrences)</a></td> <br/>
}