2015-01-01 2 views
1

가 나는 MVC5 응용 프로그램을 가지고 있고, 내보기에,이 같은 코드가 있습니다MVC5의 ActionResult에 체크 박스 값을 전달하는 방법은 무엇입니까?

<div class="form-group"> 
    @Html.LabelFor(model => model.CategoryID, "Category", htmlAttributes: new { @class = "control-label col-md-3" }) 
    <div class="col-md-9"> 
     @Html.DropDownList("CategoryID", null, "Please select a category", htmlAttributes: new { @class = "form-control" }) 
     @Html.ValidationMessageFor(model => model.CategoryID, "", new { @class = "text-danger" }) 
    </div> 
</div> 
<div id="subcatsform" class="form-group" style="visibility:hidden;"> 
    @Html.LabelFor(m => m.Subcategories, new { @class = "col-md-3 control-label" }) 
    <div id="subcats" class="col-md-9"> 

    </div> 
</div> 

그럼, 내가 이전에 선택한 카테고리에 따라 하위 범주를 채우는 자바 스크립트 코드가 있습니다. 다음 코드 세그먼트와 그것을 달성 :

$(function() { 
    $("#CategoryID").on("change", function() { 
     var selected_option = $("#CategoryID option").filter(":selected").text(); 
     $("#subcats").empty(); 

     if (selected_option != "Please select a category") { 
      $("#subcatsform").css("visibility", "visible"); 

      $.ajax({ 
       url: "/Home/GetSubcategories", 
       dataType: "json", 
       data: { 
        cid: $("#CategoryID").val(), 
       }, 
       success: function (data) { 
        $.each(data, function (key, value) { 
         var checkbox = '<input type="checkbox" name="subcategory" value="' + value.id + '"> ' + value.value + '<br />'; 
         $("#subcats").append(checkbox); 
        }); 
       } 
      }); 
     } 
     else 
     { 
      $("#subcatsform").css("visibility", "hidden"); 
     } 
    }); 
}); 

요점은 모든 것을 잘하고, 선택한 각 범주에 대해이 작동 할 때까지, 내가 제대로 하위 범주의 목록을 얻고 그들의 각 하나와 체크 박스를 만들 수 있다는 것입니다 볼 수있는 name 속성은 subcategory이고 value 속성은 서브 카테고리의 실제 ID와 동일합니다.

다음에 수행 할 작업은 선택한 체크 상자 (선택된 하위 범주를 의미 함)의 value 속성을 가져 와서 내 컨트롤러로 전달하려는 것입니다. 내 ActionResult는 다음과 같이 정의된다 : 결국 내 Subcategory 모델은 다음과 같이 정의된다,

public virtual ICollection<Subcategory> Subcategories { get; set; } 

그리고 : 다음 BusinessViewModel 내부

public async Task<ActionResult> RegisterBusiness(BusinessViewModel model) 

, 나는이 같은 속성이

public class Subcategory 
{ 
    public int SubcategoryID { get; set; } 

    public string SubcategoryName { get; set; } 

    public string SubcategoryDescription { get; set; } 

    [ForeignKey("Category")] 
    [Display(Name = "Category")] 
    public int CategoryID { get; set; } 

    public virtual Category Category { get; set; } 

    [NotMapped] 
    public bool IsSelected { get; set; } 
} 

누군가가 내가 선택한 RegisterBusiness ActionResult에 체크 박스의 값을 전달하고 내안에 저장하도록 도울 수 있다면속성, 나는 기쁠 것이다.

답변

2
subcategory

public async Task<ActionResult> RegisterBusiness(BusinessViewModel model, int[] subcategory) 

이 배열은 자동으로 선택 확인란 '값을 잡을 것라는 이름의 int 배열을 위해 RegisterBusiness 액션을 변경

.

이제 포스트 백에서 ICollection<Subcategory>string[] subcategory에서 만들고 하위 카테고리에 할당하십시오.

using System.Linq; 
... 
... 
ICollection<Subcategory> Subcategories = subcategory.Select(x => new Subcategory { SubcategoryID = x}).ToList(); 
+0

답변 해 주셔서 감사합니다. 하나의 질문, 내가 foreach 루프를하지 말아야하고, ID로 데이터베이스에있는 각 하위 카테고리를 찾아서 확인한 다음 반환해야합니까? 위의 코드와 마찬가지로 하위 범주의 새 인스턴스가 생성됩니다. – tett

관련 문제