2016-11-11 2 views
7

Ich bin auf der Suche nach einer Checkbox-Liste in .NET Core, aber einige Schwierigkeiten haben.Implementieren Sie die Checkbox-Liste im .NET-Core

Mein Viewmodel:

public class GroupIndexViewModel 
{ 
    public Filter[] Filters { get; set; } 
} 

public class Filter 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool Selected { get; set; } 
} 

Meine Ansicht:

@model GroupIndexViewModel 
<form asp-action="Index" asp-controller="Group" method="get"> 
    <ul> 
    @for (var i = 0; i < Model.Filters.Length; i++) 
    { 
    <li> 
     <input type="checkbox" id="@Model.Filters[i].Name" asp-for="@Model.Filters[i].Selected" value="@Model.Filters[i].Selected" checked="@Model.Filters[i].Selected" /> 
     <label for="@Model.Filters[i].Name">@Model.Filters[i].Name</label> 
    </li> 
    } 
    </ul> 
    <button type="submit" name="action">Filtrer</button> 
</form> 

Bei meinem Controller veröffentlicht, zeigt die Filter-Eigenschaft in meinem Viewmodel falsch selbst ausgewählt, obwohl es in der Ansicht ausgewählt ist.

+0

Haben Sie stattdessen 'Html.CheckboxFor (m => m.Filters [i] .Name)' 'versucht? – Dai

+0

Wie sieht der gerenderte HTML-Code mit Ihrem vorhandenen Razor-Code aus? – Dai

+0

Wenn für das Checkbox-Eingabefeld zusätzlich zur asp-for-Eigenschaft die Eigenschaft checked und/oder value angegeben wird, wird der tatsächliche Checkbox-Status nicht korrekt an die POST-Aktion übergeben. Wenn Sie es mit nur asp-for ablassen, dann wird es funktionieren. –

Antwort

11

Ich würde folgenden Weg tun.

@model GroupIndexViewModel 
<form asp-action="Index" asp-controller="Group" method="get"> 
    <ul> 
     @for (var i = 0; i < Model.Filters.Count; i++) 
     { 
      <li>  
       <input type="checkbox" asp-for="@Model.Filters[i].Selected" /> 
       <label asp-for="@Model.Filters[i].Selected">@Model.Filters[i].Name</label> 
       <input type="hidden" asp-for="@Model.Filters[i].Id" /> 
       <input type="hidden" asp-for="@Model.Filters[i].Name" />     
      </li> 
     } 
    </ul> 
    <button type="submit" name="action">Filtrer</button> 
</form> 

Hier nehme ich an, dass Sie eine ordnungsgemäße Implementierung von Controller und Aktion haben.

+0

Nein, die Art, wie ich das gesamte Modell zusammen mit der Wertänderung in der Checkbox beibehalten habe. – dotnetstep

+0

Wenn Sie die Klasse Filter betrachten, hat sie drei Eigenschaften: Id, Name und Selected. Name ist für Anzeige gegen Kontrollkästchen. Sonst wird nichts für die Checkbox angezeigt. Wir können auch ohne Label direkt drucken @ Model.Filters [i] .Name, aber als Frage hat das Label, das ich verwendet habe, da ich kein Problem darin sehe. – dotnetstep

Verwandte Themen