我有一个局部视图,用于过滤需要在视图上显示的内容。 以下是我写的代码。
位置的部分视图
@using JobSite.Entities
@model IEnumerable<string>
@Html.ActionLink("All jobs", "List", "Job", null, new { @class = "btn btn-
block btn-default btn-lg" })
@foreach(var link in Model)
{
@Html.RouteLink(link, new
{
controller="Job",
action="List",
location=link},
new
{
@class = "btn btn-block btn-default btn-lg"
+ (link==ViewBag.SelectedLocation?"btn-primary":"")
})
}
公司的部分视图
@using JobSite.Entities
@model IEnumerable<string>
@Html.ActionLink("All jobs", "List", "Job", null, new { @class = "btn btn-
block btn-default btn-lg" })
@foreach(var link in Model)
{
@Html.RouteLink(link, new
{
controller="Job",
action="List",
company=link},
new
{
@class = "btn btn-block btn-default btn-lg"
+ (link==ViewBag.SelectedCompany?"btn-primary":"")
})
}
在控制器中,我根据位置过滤它。
public ViewResult List(string location)
{
JobListViewModel model = new JobListViewModel();
if (location == null)
{
model = new JobListViewModel
{
jobDetails = repository.jobDetailsInterface
};
}
else
{
model = new JobListViewModel
{
jobDetails = repository.jobDetailsInterface.Where(p => p.JobLocation.LocationName == location)
};
}
return View(model);
}
如何根据部分视图中的选择显示视图中的项目?我想在购物网站中开发类似过滤条件的内容。
答案 0 :(得分:1)
我不认为每个搜索方面的一个局部视图是正确的方式(一个方面就像一个位置或公司)。我认为正确的方法是在搜索方面之上引入一个抽象级别,它可以保存关于数据结构内部每个方面的元数据,而不是将这些元数据保存为文字和不同的服务器端代码。 / p>
要完成此操作,您需要概括每个搜索方面的所有内容,以便将其表示为数据。
例如,您的模型可能如下所示:
public sealed class SearchFacetLinkViewModel {
public string Name { get; set; }
public string Link { get; set; }
}
public sealed class SearchFacetViewModel {
public string Description { get; set; }
public IEnumerable<SearchFacetViewModel> Links { get; set; }
public string SelectedFacet { get; set; }
}
然后在你看来:
@model IEnumerable<SearchFacetViewModel>
@foreach (var searchFacet in Model) {
// Insert your above code for your views, but instead,
// use values from the model instead of hard-coding them
// so each facet can be generated from within the loop.
@foreach (var facetLink in searchFacet.Links) {
// use facetLink.Name and facetLink.Link
}
}
您可以使用会话来存储用户指定的当前所选构面,或者您可以将所有当前构面状态嵌入到所有链接中(例如,如果选择了某个位置,则每个公司网址也会被释放)其中也有&location=
。您还可以在数据库中维护用户的选择状态。
在您的控制器中,您可以接受每次提交的所有方面值,或者如果您维护facet状态服务器端,则只提供&#34; delta&#34;行动,例如&#34;删除分面位置&#34;或者&#34;添加facet company = xyz&#34;。您甚至可能希望切换到asychronus / AJAX模型,其中页面没有被重新加载,而不是返回整个视图,您的初始页面更像是一个空容器,然后AJAX调用以获取当前页面的搜索结果facets接收匹配值的JSON有效负载(这实际上通过消除维护当前构面状态服务器端的所有需要,使得整个客户端的构面更容易维护)。除了AJAX之外,还有空间可操作请求包含所有当前构面值的URL(不允许发生链接的默认操作,而是运行JavaScript)。
请理解分面搜索是一个相当复杂的主题,有许多细微差别。很难引导您找到全面和最佳的解决方案,特别是因为随着您的知识和能力的提高,您的项目必须逐步发展和改进。没有真正的替代品可以解决因编码选择而遇到问题的痛苦,然后学习如何克服这些问题(以便下次选择更好)。