Как получить список значений флажков для публикации на моем контроллере - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть вид со списком флажков. Он отображается нормально, но на Post, счетчик = 0 для моего списка. Я видел кучу постов на SO, которые все говорят то же самое, что я и пытался, но это не работает, поэтому я должен что-то упустить.

Мои ViewModels:

public class ParentViewModel 
{
    public ParentViewModel()
    {
        ClassOfTradeList = new List<CheckBoxListItem>();
    }

    public string Name { get; set; }
    public List<CheckBoxListItem> ClassOfTradeList { get; set; }
}

public class CheckBoxListItem
{
    public long Id { get; set; }
    public string Name { get; set; }
    public bool IsSelected { get; set; }
}

Тогда мой View:

@model app.Models.ViewModels.ParentViewModel

// other parent fields

@for (int i = 0; i < Model.ClassOfTradeList.Count; i++)
{
    @Html.CheckBoxFor(m => m.ClassOfTradeList[i].IsSelected)
    @Html.HiddenFor(m => m.ClassOfTradeList[i].Id)
    @Html.LabelFor(m => m.ClassOfTradeList[i].IsSelected, Model.ClassOfTradeList[i].Name)
    <br />
}

My Post в контроллере:

public ActionResult ParentReturn(ParentViewModel model)
{

}

My Get:

[HttpGet]
public ActionResult Parent()
{
    var model = new ParentViewModel();
    //fill in properties here
    model.ClassOfTradeList = ClassOfTradeList();
    return View(model);
}

private List<CheckBoxListItem> ClassOfTradeList()
    {
        var classofTrades = _tradeRepo.GetAll().Where(c => c.IsDeleted == false).ToList();
        var classOfTradeList = new List<CheckBoxListItem>();
        classOfTradeList = classofTrades.Select(c => new CheckBoxListItem
        {
            Name = c.Name,
            Id = c.Id
        }).ToList();

        return classOfTradeList;
    }

Итак, когда я вернусь кконтроллер, модель. ClassOfTrades.Count = 0. Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2019

Я понял это. Когда я впервые пытался это исправить, я положил:

@Html.HiddenFor(m => m.ClassOfTradeList)

в начале просмотра. Это переопределяло мою скрытность для идентификатора позже в представлении.

Спасибо всем за вашу помощь. Поэтому удаление этого кода и сохранение кода, который я опубликовал, сделали его работоспособным.

0 голосов
/ 09 ноября 2019

Вы, вероятно, должны использовать «Model.ClassOfTradeList [i] .Name» вместо Id.

@using (Html.BeginForm("ParentReturn", "Home", FormMethod.Post))
{
    for (int i = 0; i < Model.ClassOfTradeList.Count; i++)
    {
        @Html.CheckBoxFor(model => Model.ClassOfTradeList[i].IsSelected);
        @Html.HiddenFor(model => Model.ClassOfTradeList[i].Name);
        @Html.LabelFor(model => Model.ClassOfTradeList[i].IsSelected, Model.ClassOfTradeList[i].Name);
        <br />
    }
    <input type="submit" value="click" />
}

https://dotnetfiddle.net/C0trTW

...