2017-11-04 14 views
0

私のViewModelには、次の2つのリストがあります(1つはフォーム内の使用可能なカテゴリをすべて表示するために使用され、もう1つは選択されたユーザーカテゴリ値):モデルバインダーが正しくSelectedCategoryValuesリストを結合されたフォームを送信するとチェックボックスリストの値は、ASP.NET Core MVCのビューGETリクエストにバインドされていません

@foreach (var category in Model.Categories) { 
    <div class="checkbox"> 
      <label><input type="checkbox" name="SelectedCategoryValues" 
      value="@category.Value">@category.Name</label> 
    </div> 
} 

:私は私のいずれかの形式の内部で、次のしている私の見解では

public List<CategoryViewModel> Categories{ get; set; } 
public List<string> SelectedCategoryValues { get; set; } 

ただし、ページを読み込むときに、選択したチェックボックスが自動的に選択されません。

次のコードは、私の編集GETアクションである:

var vm = new ProductEditViewModel() 
    { 
     Id = product.Id, 
     Name = product.Name, 
     Categories = new List<CategoryViewModel>() 
     { 
      new CategoryViewModel() { Name = "Category 1", Value = "category1" }, 
      new CategoryViewModel() { Name = "Category 2", Value = "category2" }, 
      new CategoryViewModel() { Name = "Category 3", Value = "category3" } 
     }, 
     SelectedCategoryValues = productCategories.Select(c => c.Value).ToList() 
    }; 

    return View(vm); 

答えて

1

あなたはCategoryViewModelbool IsSelected{get;set;}のようなものが含まれており、コントローラに値を割り当てる必要があります。

var vm = new ProductEditViewModel() 
{ 
    Id = product.Id, 
    Name = product.Name, 
    Categories = new List<CategoryViewModel>() 
    { 
     new CategoryViewModel() { Name = "Category 1", Value = "category1", 
     IsSelected = productCategories.Where(c => c.Value == "category1").Count() > 0 ? true : false}, 
     //do the same 
     //new CategoryViewModel() { Name = "Category 2", Value = "category2" }, 
     //new CategoryViewModel() { Name = "Category 3", Value = "category3" } 
    }, 
    //not required 
    //SelectedCategoryValues = productCategories.Select(c => c.Value).ToList() 
}; 

return View(vm); 

とビューで

@foreach (var category in Model.Categories) { 
    <div class="checkbox"> 
      <label><input type="checkbox" checked="@category.IsSelected" name="SelectedCategoryValues" 
      value="@category.Value">@category.Name</label> 
    </div> 
} 
関連する問題