2013-01-14 3 views
0

MVC ASP를 사용하여 SQL 저장 프로 시저에서 채워지는 일련의 드롭 다운 목록을 만듭니다. 그러나 각 연속 드롭 다운 목록은 이전 목록의 선택을 매개 변수로 프로 시저 호출에 전달하여 채워야합니다.C# DropDownList 다시 게시

@Html.DropDownListFor(x => x.environmentName, new SelectList(Model.environmentName)) 

을 사용하여 생성 된 목록을 게시하려면 어떻게합니까?

modelView에 저장하려고 시도한 다음 다시 컨트롤러로 뷰를 전달하려고 시도했지만이 방법을 사용하는 것이 좋지 않습니다.

+0

지갑이 예 [ASP.Net MVC에서 계단식 DropDownList로 (http://blogs.msdn.com/b/rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net -mvc.aspx) –

+0

jQuery를 사용하는 좋은 예입니다. 그러나 목록에서 선택된 값을 매개 변수로 전달할 때마다 저장된 proc을 실행할 필요가 있습니다. 이 예제에서 그는 생성시 json 객체를 초기화하는 중이다. –

답변

0

다음은 이전 선택 사항을 기반으로 다음 목록을 채우기 위해 컨트롤러에 대한 아약스 콜백을 사용하여 3 단계 계단식 드롭 다운에 대해 작성한 JQuery 솔루션입니다. 이렇게하면 올바른 방향으로 갈 수 있습니다.

Select: <select id="category" style="width: 150px"> 
     <option></option> 
     @foreach (string cat in ViewBag.Categories) 
     { 
      <option>@cat</option> 
     } 
    </select><span id="errorforcategory" style="color: red"></span> 
<select id="subcategory1" disabled="disabled" style="width: 150px"><option></option>  </select> 
<select id="subcategory2" disabled="disabled" style="width: 150px"><option></option></select> 


<script type="text/javascript"> 
$("#category").change(function() { 
    $("#subcategory1").load('@Url.Action("GetSubCategory")' + "?category=" +  $("#category").val()); 
    $('#subcategory2').empty(); 
    $('#subcategory2').append($("<option></option>")); 
    $('#subcategory2').attr('disabled', 'disabled'); 
}).ajaxStop(function() { 
    if ($('#subcategory1 option').size() > 2) { 
     $('#subcategory1').attr('disabled', ''); 
    } else { 
     $('#subcategory1').attr('disabled', 'disabled'); 
    } 

}); 

$("#subcategory1").change(function() { 
    if ($("#subcategory1").val().trim()) { 
     $("#subcategory2").load('@Url.Action("GetSubCategory")' + "?category=" + $("#category").val() + "&subcategory=" + $("#subcategory1").val()); 
    } else { 
     $('#subcategory2').empty(); 
     $('#subcategory2').attr('disabled', 'disabled'); 
    } 
}).ajaxStop(function() { 
    if ($('#subcategory2 option').size() > 2) { 
     $('#subcategory2').attr('disabled', ''); 
    } else { 
     $('#subcategory2').attr('disabled', 'disabled'); 
    } 
}); 

그리고 나서 컨트롤러에서 원하는 방법을 사용하여 저장 프로 시저를 호출 한 다음 결과 옵션 텍스트를 빌드 할 수 있습니다.

public string GetSubCategory(string category, string subcategory) 
    { 
     string returnval = "<option></option>"; 
     if (!string.IsNullOrEmpty(subcategory)) 
     { 
      foreach (
       var cat in 
        db.Categories.Where(c => c.category1 == category && c.subcategory1 == subcategory) 
         .Select(c => c.subcategory2) 
         .Distinct()) 
      { 
       if (!string.IsNullOrEmpty(cat.Trim())) 
        returnval += "<option>" + cat + "</option>"; 
      } 
      return returnval; 
     } 

     return Enumerable.Aggregate(db.Categories.Where(c => c.category1 == category).Select(c => c.subcategory1).Distinct().Where(cat => !string.IsNullOrEmpty(cat.Trim())), returnval, (current, cat) => current + ("<option>" + cat + "</option>")); 
    }