![](/img/trans.png)
[英]Tab control class with 2 generic types for tab and page that link to each other
[英]How to implement a tab control where each tab is a generic paged entity?
背景:
我正在尝试实现选项卡控件。 选项卡如下:
| Funds | Companies | Groups |
并实现如下:
<ul class="ActionControl">
<li>
<%=Html.ActionLink(string.Format("Funds ({0})", Model.Summary.FundCount)
, "ResultsList", new {selectedTab = "Funds"} ) %>
</li>
// more tabs removed for brevity, one <li> for each
</ul>
每个选项卡都是操作方法的链接,该操作方法定义为:
public PartialViewResult ResultsList(SearchViewModel search)
{
var result = new SearchViewModel
{
Summary = _entitySearchService.GetSearchDataSummary(search.SearchExpression),
PagedFunds = _fundService.GetPagedEntitiesByName<Fund>(10, search.SearchExpression),
PagedCompanies = _companyService.GetPagedEntitiesByName<Company>(10, search.SearchExpression),
PagedGroups = _groupService.GetPagedEntitiesByName<CompanyGroupInfo>(10, search.SearchExpression)
};
}
这行得通,但这是不正确的,因为我只想带回所单击选项卡的数据。 我可以对search.SelectedTab
存储的值进行switch()
并仅填充与单击的选项卡相关联的属性,但这很麻烦。
而且,这在“部分视图”中也存在问题,因为我必须区分这些选项卡以标识我应该使用哪个选项卡填充表。 当前,如果您单击“资金”标签,这就是填充结果面板的方式:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SearchViewModel>" %>
<% Html.RenderPartial("Tabs"); %>
<table>
<% foreach (var item in Model.PagedFunds) {%>
<tr>
<td><%= item.Name %></td>
</tr>
<% }%>
</table>
供参考,这是SearchViewModel:
public class SearchViewModel
{
public string SearchExpression { get; set; }
public string SelectedTab { get; set; }
public SearchDataSummary Summary { get; set; }
public Paging<Fund> PagedFunds { get; set; }
public Paging<Company> PagedCompanies { get; set; }
public Paging<CompanyGroupInfo> PagedGroups { get; set; }
}
分页的签名是:
public class Paging<T> : List<T> // contains functionality to manage paging and act like a List<T>
题:
我要解决此问题的最佳方法是什么?
每个标签都应该有单独的操作方法吗? 因此,点击Funds
转到
public PartialViewResult Funds(SearchViewModel search)
并返回ViewUserControl<Paging<Fund>>
然后单击Companies
去
public PartialViewResult Companies(SearchViewModel search)
并返回ViewUserControl<Paging<Company>>
理想情况下,我可以保留单个ResultsView
操作方法,并采用更通用的方法来返回分页的项目。 我认为这是可能的,但我在细节上陷入了沉迷,无法看到树木的木材。 有人可以指出我可以采取的方法吗? 谢谢
当我们在一个MVC站点中实现选项卡(JQuery UI)时,我们为每个选项卡使用了单独的操作方法。 在我们的情况下,选项卡足够不同,因此无论如何我们都必须为每个选项卡使用单独的partialViews。
即使您可以使用相同的partialView,我认为通过为每个选项卡使用不同的方法(请考虑可读性,问题跟踪,将来的增强功能),您也将减少麻烦和维护。 保持一个动作,想想如果...。如果公司需要其自己的局部视图,该怎么办?如果资金需要一些不同的搜索条件,该怎么办?如果我们必须添加更多标签,该怎么办? 当然,您可以在当前设置中解决所有这些问题,但是到什么时候变得难以维护。 使用独特的动作方法恕我直言,能够解决所有这些以及更多问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.