2009-12-29 5 views
10

어떤 이유로 나는 이것을 고수하고있다. 동일한보기의 DropDownList를 기반으로 뷰에서 결과를 필터링해야합니다. 기본 아이디어는 다음과 같습니다. 여러 파트너에 속한 공급자 목록이 있지만 공급자 목록에는 모든 공급자가 포함되어 있습니다 (모든 파트너 용). 누군가가 파트너를보고 싶어 할 때 파트너별로 공급자를 표시 할 수 있어야합니다 (그렇지 않으면 기본 목록이 모든 공급자가됩니다). 내보기는 현재 "기본값"(모두 표시)이지만, 몇 가지 이유로 여기에 앉아서이 결과를 필터링하는 방법을 알아 내려고 (지난 2 시간 동안) 모니터를 쳐다 보았습니다.ASP.NET MVC 필터링 결과 목록/격자

어떤 제안을 시작하거나 어떻게해야합니까?!

답변

10

편집 : 당신은 (단지 하위 목록이 새로 고쳐집니다 때문에 더 나은 사용자 경험을 제공 할 것입니다) jQuery를 AJAX를 사용하여이 작업을 수행하려면, this tutorial를 참조하십시오.

제대로 이해하면 기본적으로 WebForms 스타일 포스트 백을 원합니다.

예를 들어, 국가 및 국가 세분 (예 : 주,도 등)이있는 통제권을 가지고 있다고 가정 해 보겠습니다. 국가가 변경되면 적절한 하위 구분이 표시되기를 원합니다.이 필터링 종속 목록을 얻는 열쇠입니다

<% using (Html.BeginForm()) { %> 
    <%=Html.DropDownList("Address.CountryId", new SelectList(Country.GetAll(), "Id", "Name"), new { onchange = "this.form.submit();" })%> 
    <%=Html.DropDownList("Address.CountrySubdivisionId", new SelectList(CountrySubDivision.GetByCountryId(Model.CountryId), "Id", "Name"))%> 
    <input type="submit" name="btnSubmit" value="Submit"/> 
<%} %> 

:

그래서이보기 것

new { onchange = "this.form.submit();" } 

을 그리고 컨트롤러는,이 같은이있을 것이다 :

[AcceptVerbs(HttpVerbs.Post)] 
    public ViewResult Index(string btnSubmit) 
    { 
     if (btnSubmit == null) 
     { 
      // return the view displayed upon GET 
     } 
     else 
     { 
      // process the submitted data 
     } 
    } 

위의 코드에서 드롭 다운의 값을 변경하여 양식 제출이 트리거 된 경우 btnSubm 그것은 null이됩니다. 따라서 사용자가 게시하려는 작업은 사용자가 변경 사항을 마무리하기위한 것인지 여부를 알 수 있습니다.

+0

굉장한 대답. 감사! – SlackerCoder

+0

당신을 가장 환영합니다. MVC가 우리가 필요로하는 모든 것을 할 수있는 동료를 보여 주려고했기 때문에 이것은 또한 중요했습니다. –

+2

튜토리얼 링크가 깨진 것 같습니다 ... – SteveC

3

많은 고양이가있는 가지가 있습니다. 여기에 하나 있습니다.

DropDownList를 METHOD = GET 형식으로 묶습니다.

<form action="" method="get"> 
    <select name="provider"> 
    <option>1</option> 
    <!-- etc --> 
    </select> 
</form> 

그런 다음 컨트롤러, 필터에 통과 된 공급자의 값에 따라. 비어 때 당신이 행동의 어떤 종류를 가질 수 있도록 NULL이 매개 변수로 취급해야합니다.

현재 코드를 게시하지 않으면이 코드보다 훨씬 더 구체적입니다.

+1

+1 간단한 코드 예제. –

1

아마도 모델을보기로 전달하고 해당 모델이 파트너의 목록 또는 IEnummerable이라고 가정 해 보겠습니다. 원하는 것은 목록을 제한하는 것입니다. 이를 수행하려면보기에 드롭 다운 목록을 추가하고 가능한 일부 파트너에게 입력하십시오. 이 작업은 ViewData에 목록을 추가하거나보기로 다시 전달 된 모델을 확장하여 수행 할 수 있습니다. 둘 다 장점이 있습니다. 이제 드롭 다운을 변경하면 페이지가 다시로드되지만 필터 인 매개 변수가 추가됩니다. 제어기가 조치에서 해당 매개 변수를 점검하고,없는 경우 필터되지 않은 목록을 리턴하고, 필터가 적용된 경우 목록을 리턴하십시오. 보기에는 멍청하게 표시됩니다.

필터링의 경우 LINQ를 사용해 볼 수 있습니다.

0

컨트롤러 액션에 대한 매개 변수 (아마도 nullable?)를 공급자의 ID로 사용하여 DB에서 이미 가져온 결과를 필터링 할 수 있습니다. 그런 다음 동일한보기를 사용하여 목록을 표시하고 드롭 다운 목록이 변경되면 새 목록을 요청하십시오.

6

이전 답변을 추가하십시오.

는 드롭 다운을 만들려면 (ASP .NET MVC 3) I 한 다음 Index.cshtml에

코드를 추가

@using (Html.BeginForm()) 
{  
@Html.DropDownList("EmployeeId", (SelectList)ViewData["EmployeeId"])  
<input type="submit" name="btnSubmit" value="Submit"/> 
} 

의 기본 ActionResult에 YourModelNameController.cs에 코드를 추가합니다 색인()

public ActionResult Index() 
{ 

    //create a selectlist 
     var employeeList = from el in db.Employee select el; 
     ViewData["EmployeeId"] = new SelectList(employeeList, "EmployeeId", "TmName"); 

     return View(modelName); 
    } 
+1

+1 Razor 특정 답변을 찾고있었습니다! 감사! –