2017-11-04 1 views
0

In meinem ViewModel habe ich die folgenden zwei Listen (eine wird verwendet, um alle verfügbaren Kategorien im Formular anzuzeigen und die andere wird nur für den ausgewählten Benutzer verwendet Kategorie-Werte):Checkbox-Listenwerte sind nicht bindend für View GET-Anforderung in ASP.NET Core MVC

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

meiner Ansicht ich habe folgendes innerhalb eines meiner Formen:

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

Wenn Sie das Formular absenden das Modell Binder korrekt SelectedCategoryValues ​​Liste verbindlich.

Beim Laden der Seite werden die ausgewählten Kontrollkästchen jedoch nicht automatisch ausgewählt.

Der folgende Code ist in meinem bearbeiten GET Aktion:

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); 

Antwort

1

Sie brauchen so etwas wie bool IsSelected{get;set;} in CategoryViewModel und weisen Werte in der Steuerung enthalten.

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); 

Und in der Ansicht

@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> 
} 
Verwandte Themen