2010-08-05 5 views
0

배경 :
탭 컨트롤을 구현하려고합니다. 다음과 같이각 탭이 일반 페이지 된 엔터티 인 탭 컨트롤을 구현하는 방법은 무엇입니까?

| Funds | Companies | Groups | 

및 구현 :

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) 
    }; 
} 

이 작품 :

<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> 

각 탭과 같이 정의 된 액션 메소드에 대한 링크입니다 탭은 다음과 같습니다 ,하지만 그것은 정확하지 않습니다. 단지 클릭 한 탭에 대한 데이터를 다시 가져 오려고하기 때문입니다. 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 액션 메소드를 유지하고있을 수 돌려줍니다 페이징 된 항목을 반환하는보다 일반적인 방법. 나는 이것이 가능하다고 생각하지만 세부 사항에 너무 푹 빠져서 나무를 볼 수 없다. 누군가 제가 취할 수있는 접근법을 지적 해주십시오. 감사합니다.

답변

0

MVC 사이트 중 하나에서 탭 (JQuery UI)을 구현할 때 각 탭마다 별도의 조치 방법을 사용했습니다. 우리의 경우, 탭은 각 탭마다 별도의 partialView를 가질 정도로 충분히.습니다.

동일한 partialView를 사용할 수 있더라도 각 탭마다 고유 한 방법 (가독성, 문제 추적, 향후 개선 사항)을 사용하면 두통과 유지 관리가 훨씬 줄어들 것입니다. 하나의 행동을 유지하면서 무엇을 생각해보십시오. 회사가 자체적 인 부분보기가 필요한 경우, 펀드에 다른 검색 기준이 필요한 경우, 더 많은 탭을 추가해야하는 경우 어떻게해야합니까? 물론 현재 설정에서이 모든 것을 해결할 수는 있지만 어느 시점에서 유지 보수가 불가능한 지 알 수 있습니다.이 모든 것을 해결할 수 있다는 것은 IMHO라는 별개의 조치 방법으로 더 나아질 것입니다.

+0

나는 적어도 당신의 제안과 함께 가기로 결정했다. 내가 그것을 일반적으로 다시하는 길을 볼 수 있다면, 내가 할 수있는 것을 보게 될 것이다. 그러나 지금은 진전을 이루어야하며 귀하의 제안은 효과가 있습니다. 감사 – DaveDev