相當一個老問題,但因爲它是引用here,我在這裏給我的答案的副本...
注:與最近的烏節Dev分支嘗試。
這裏,進行測試,我已經做了直接TermsFilter.cs
和TermsFilterForms.cs
一些變化,但基於這個例子,你就可以寫自己的IFilterProvider
和IFormProvider
...
所以,在TermsFilterForms.cs
,在形式定義的Describe()
方法,嘗試添加此:
...
),
_ProductType: Shape.TextBox(
Id: "product-type", Name: "ProductType",
Title: T("Product Type"),
Classes: new[] { "text medium", "tokenized" },
Description: T("Enter the product type.")
)
);
...
然後,編輯過濾器時,你會看到,可以標記化新的輸入字段和其中e。g您可以把:
{Request.QueryString:product-type}
然後,在TermsFilter.cs
,你可以注入一個標記:在ApplyFilter(dynamic contex)
方法
...
private readonly ITokenizer _tokenizer;
public TermsFilter(ITaxonomyService taxonomyService, ITokenizer tokenizer) {
_taxonomyService = taxonomyService;
T = NullLocalizer.Instance;
_tokenizer = tokenizer;
}
...
然後,您可以標記化您的產品類型字段是這樣的:
var termName = _tokenizer.Replace((string)context.State.ProductType, null);
在此,爲了檢測,在查詢字符串產品類型參數,我期望只有一個值(不是陣列),其是一個術語名稱(而不是一個id)。但是你可以根據自己的需要更改代碼...
然後,通過使用分類服務,你可以做這樣的事情:
var taxoPart = _taxonomyService.GetTaxonomyByName("Product Type");
var termPart = _taxonomyService.GetTermByName(taxoPart.Id, termName);
然後你就可以使用例如termPart.Id
更新context.Query
(參見代碼)...
最好
感謝您的回覆Bertrand。你可以點我在正確的方向在何處我需要去加入這樣的代碼?由於 – Anto 2014-11-21 09:16:58
在分類項過濾器。可以在自定義模塊中重現其代碼,也可以改進現有模塊並給我們提出拉取請求。 – 2014-11-21 21:33:27