2016-11-11 2 views
7

Я ищу, чтобы реализовать checkboxlist в .Net Core, но сталкиваются с некоторыми трудностями.Внедрить флажок в ядре .NET

Мои 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; } 
} 

Мой Вид:

@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> 

При проводке в мой контроллер, свойство Filter в моем ViewModel показывает выбранный ложным, даже если она выбрана в.

+0

Вы пытались использовать 'Html.CheckboxFor (m => m.Filters [i] .Name)' вместо? – Dai

+0

Также, как выглядит визуализированный HTML с вашим существующим кодом Razor? – Dai

+0

Если для поля ввода флажка в дополнение к свойству asp-for вы указываете свойство checked и/или value, то фактическое состояние флажка не будет передано правильно в действие POST. Если вы оставите это с помощью asp-for, тогда это сработает. –

ответ

11

я сделал следующий способ.

@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> 

Здесь я предполагаю, что у вас есть правильная реализация контроллера и действия.

+0

Нет, как я сделал, чтобы сохранить всю модель вместе с изменением ценности в флажке. – dotnetstep

+0

Если вы посмотрите на класс фильтра, у него есть три идентификатора свойства, имя и выбранные. Имя используется для отображения напротив флажка. В противном случае для флажка ничего не отображается. Мы можем обойтись без ярлыка, а также напрямую печатать @ Model.Filters [i] .Name, но поскольку вопрос имеет тот ярлык, который я использовал, поскольку я не вижу в этом никакой проблемы. – dotnetstep

Смежные вопросы