Próbuję stworzyć prostą przewijaną listę pola wyboru w ASP.NET MVC 5. Dostałem pojedyncze pole wyboru do pracy i poprawnie publikuje odpowiednią wartość do modelu.Checked:

Kontroler

using System.Web.Mvc;
using Checkbox1.Models;

namespace Checkbox1.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var model = new TestModel
            {
                Checked = true
            };
            return View(model);
        }

        [HttpPost]
        public ActionResult Index(TestModel model)
        {
            return View(model);
        }
    }
}

Widok

@model Checkbox1.Models.TestModel


@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{

    @Html.CheckBoxFor(m => m.Checked, Model.Checked)

    <input type="submit" value="submit" />

}

Model

namespace Checkbox1.Models
{

    public class TestModel
    {
        public bool Checked { get; set; }

    }

}

Ale kiedy wypróbuję to samo z listą bools, nie mogę uzyskać wartości Bool, aby przejść do kontrolera. Wygląda na to, że model jest re-instancjonowany i unieważniony, gdy zostanie opublikowany do kontrolera:

Kontroler

using System.Collections.Generic;
using System.Web.Mvc;
using Checkbox2.Models;

namespace Checkbox2.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var model = new TestModel()
            {
                lstChecked = new List<bool>()
            };

            model.lstChecked.Add(true);

            return View(model);
        }

        [HttpPost]
        public ActionResult Index(TestModel model)
        {
            return View(model);
        }


    }
}

Widok

@model Checkbox2.Models.TestModel


@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{

    @Html.CheckBoxFor(m => m.lstChecked[0], Model.lstChecked[0])

    <input type="submit" value="submit" />

}

Model

using System.Collections.Generic;
using System.Web;

namespace Checkbox2.Models
{
    public class TestModel
    {
        public List<bool> lstChecked;

    }

}

Chciałbym wiedzieć, dlaczego nie działa, ale jeśli mógłbyś wskazać mi prosty przykładowy przykład przewijanej listy pola wyboru, które byłyby również bardzo doceniane!

1
Madison320 6 styczeń 2020, 22:44

1 odpowiedź

Najlepsza odpowiedź

Aby uczynić listę pola wyboru, które odpowiadają boolsowi na liście, musisz pętlować się na liście i dodać pole wyboru z indeksiem każdego elementu.

foreach(int i = 0; i <+ Model.lstChecked.Count; i++){
    @Html.CheckBoxFor(m => m.lstChecked[i])
}

Ponadto, jaki jest cel drugiego parametru w @Html.CheckBoxFor(m => m.lstChecked[0], Model.lstChecked[0])? Pierwszy należy zadbać o wypełnienie pola wyboru z wartością z modelu i wiązania wejścia użytkownika dla sterownika na przesyłaniu.

1
Aliza Berger 6 styczeń 2020, 20:14