背景
我正在尝试实现一个制表符控件。选项卡如下:
| 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)
};
}
这样可行,但它不正确,因为我只想恢复被点击的标签的数据。我可以对switch()
中存储的值执行search.SelectedTab
,并仅填充与单击的选项卡关联的属性,但这很麻烦。
此外,这在部分视图中存在问题,因为我必须区分选项卡以确定应该填充表格的哪一个。目前,如果您点击了“资金”标签,我就会填充结果面板:
<%@ 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; }
}
和Paging的签名是:
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
操作方法,并使用更通用的方法来返回已分页的项目。我认为这是可能的,但我在细节上陷入困境,我无法看到树木。有人可以指出我可以采取的方法吗?感谢
答案 0 :(得分:0)
当我们在我们的一个MVC站点中实现选项卡(JQuery UI)时,我们为每个选项卡使用了单独的操作方法。在我们的例子中,选项卡不同,我们必须为每个选项卡分别设置partialView。
即使您可以使用相同的partialView,我认为通过为每个选项卡使用不同的方法(考虑可读性,问题跟踪,未来的增强功能),您将更少地头痛和维护。保持一个动作,想想如果是......如果公司需要自己的部分视图,如果资金需要一些不同的搜索标准,如果我们必须添加更多标签怎么办?当然,您可以在当前设置中解决所有这些问题,但在什么时候它会变得无法维护。使用不同的行动方法恕我直言,能够解决所有这些问题和更多问题会更好。