@foreach (var g in moduleData.GetPropertyModuleGroups(catalogSettings))
{
@g.Value
foreach (var p in propertyDataList.GetPropertyFilterList(g.Key))
{
@FilterCheckBox(p.Key, p.Value, "#articlelistdisplay", sessionParams.Info.GetXmlPropertyBool("r/" + p.Key), "", "propertyname='" + p.Value.Replace("'", "'") + "'")
}
}
@FilterClearButton(ResourceKey("DNNrocket.clear").ToString(), "#articlelistdisplay")
@FilterJsApiCall(moduleData.SystemKey, sessionParams, "ArticleList.cshtml")
```
**Notice:** The default template uses "ArticleList.cshtml" as the AppTheme list template. It MUST be the same in the AppTheme.
Also notice the default 'PropertyFilter.cshtml' template always uses a standard return element call '#articlelistdisplay'.
If you want a different filter design you can copy '/DNNrocketModules/RocketDirectoryAPI/Themes/Default/1.0/default/PropertyFilter.cshtml' to your AppTheme and change it as you require.
### Razor Tokens
Razor tokens have been created to make the JS and HTML easily function together. Each element can be done directly in the template if required
```
@FilterCheckBox(string checkboxId, string textName, string sreturn, bool value, string cssClass = "", string attributes = "")
```
Creates a checkbox that calls the API when clicked.
```
@FilterClearButton(string textName, string sreturn)
```
Creates a button that clears the property session parameters.
```
@FilterJsApiCall(string systemKey, SessionParams sessionParams, string templateName = "articlelist.cshtml")
```
Adds the required JS to make the checkboxes work.