2015-01-01 99 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> 

然後,我有一個JavaScript代碼根據以前選擇的類別,它填充的子類別。我用下面的代碼段實現它:

$(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是這樣定義的:

public async Task<ActionResult> RegisterBusiness(BusinessViewModel model) 

BusinessViewModel裏面,我有這樣的特性:

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

而且,最後我Subcategory模型的定義是這樣的:

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,然後將它們存儲在我的ICollection<Subcategory> Subcategories財產,我會很高興。

回答

2

更改RegisterBusiness採取的措施名爲subcategory

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

的陣列將自動捕捉選擇複選框值的int數組。

現在,在回發創建ICollection<Subcategory>string[] subcategory並分配到子類別。

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

感謝您的回答。一個問題,我不應該做一個foreach循環,查找我的數據庫中的每個子類別與檢查的ID,然後返回它們?因爲像上面的代碼,我想它會創建一個子類別的新實例。 – tett

相關問題