-1

내 모델은 다음과 유사합니다. 저장 프로 시저에 의해 어느 시점에서 항목으로 채워집니다.ASP.NET MVC DropDownListFor

public class myModel 
{ 
    public List<SelectListItem> myList { get; set; } 
    public List<myModel> modelList { get; set; } 
} 

여기 내 컨트롤러입니다.

[HttpGet] 
public ActionResult getMyListItems() 
{ 
    var viewModel = new myModel(); 
    viewModel.myList = viewModel.getMyList(); 
    viewModel.modelList = viewModel.getMyModelList(); 

    return View(viewModel); 
} 

여기까지입니다. 사용자가 modelList의 내용을 필터링 할 수 있도록 드롭 다운 목록을 작성합니다. SQL 쿼리에서 WHERE 절과 같은 종류입니다. 사용자가 항목을 선택하고 제출 버튼을 클릭하면 필터가 적용됩니까? 또는 버튼 클릭 이벤트없이 드롭 다운에서 항목을 실제로 선택한 후에 발생합니까?

@model SWAM2.Models.EmployeeOfcSpecKnow 
@using CommonCode.HtmlHelpers; 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <div class="editor-label"> 
     Filter by Column1 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownListFor(model => Model.Column1, Model.myList, new { style = "width:400px" }) 
     @Html.ValidationMessageFor(model => model.Column1) 
    </div> 

    <div class="toppad10"> 
     <input type="submit" value="Apply Filter" /> 
    </div> 

    <table class="grayTable rowStriping"> 
     <thead> 
      <tr> 
       <th>Column1</th> 
       <th>Column2</th> 
       <th>Column3</th> 
      </tr> 
     </thead> 

    <tbody> 
     @foreach (var item in @Model.modelList) 
     { 
      <tr> 
       <td> 
        @Html.DisplayFor(modelItem => item.Column1) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.Column2) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.Column3) 
       </td> 
      </tr> 
     } 
    </tbody> 

    </table> 
} 

답변

1

한 가지 방법입니다 새로를 얻을 :

은 참조 필터링 된 목록. 내가 jQuery를 선호

public PartialViewResult GetFilteredItems(string filter) 
{ 
    var viewModel = new myModel(); 
    viewModel.myList = viewModel.getMyList(); 
    viewModel.modelList = viewModel.getMyModelList(); 
    viewModel.ApplyFilter(filter); 
    return PartialView(viewModel); 
} 

및 자바 스크립트를 사용하여 호출 :이 방법을 사용하면이 부분을 작성해야 거라고

$("#dropDownListIdHere").change(function() { 
    $.ajax({ 
    url: "@Url.Action("GetFilteredItems")", 
    method: "GET", 
    data: { filter: $(this).val() }, 
    success: function (result) { 
      $("#listHolderIdHere").html(result); 
     } 
    }) 
}); 

주 그래서 예를 들어,이 같은 조치를 만들 것 필터링 된 항목으로 렌더링 할 테이블을 포함 할 뷰 파일 (컨트롤러 동작에 이름을 지정하지 않으려면 GetFilteredItems라고 함). 또한 드롭 다운에 ID를 지정하고 부분 뷰를 배치 할 일종의 컨테이너에 ID를 지정해야합니다.

관련 문제