繁体   English   中英

如何在每个标签都是通用页面实体的地方实现标签控件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM