Получить и установить данные CheckboxList для таблицы в Asp Core 2.2 - PullRequest
0 голосов
/ 23 апреля 2019

Я написал класс и установил общедоступный индекс IActionResult ():

    public class SuperBowl
    {
        public string Name { get; set; }
        public double Price { get; set; }
        public bool GiftPackage { get; set; }
    }
        [HttpGet]
        public IActionResult Index()
        {
            double[] pricearraying = { 630, 500.25, 385.75 };
            string[] namearraying = { "Red", "Green", "Blue" };
            var heyinitial = new List<SuperBowl>();
            for (int i = 0; i < pricearraying.Length; i++)
            {
                heyinitial.Add(new SuperBowl { Name = namearraying[i], Price = pricearraying[i], GiftPackage = false });
            }
            return View(heyinitial);
        }

[HttpPost]
 public IActionResult Index(List<SuperBowl> ceko)
{
            double[] exposalary = { 63.00, 42.00, 21.00 };
            var choosing = new List<double>();
            foreach (var item in ceko.Select(x=>x.GiftPackage))
            {
                if (item == true)
                {
                    choosing.Add(exposalary[ceko.FindIndex(r=>r.GiftPackage==item)]);
                }
            }
}
return View("MyCheckOut",choosing);
}

А вот и мой Index.cshtml:

@model List<SuperBowl>
@{
}

<!DOCTYPE html>

<html>
<head>
    <title>Index</title>
</head>
<body>
    <form asp-action="Index" asp-controller="Home" method="post">
        <div class="table-responsive-sm table-hover">
            <table align="center" class="table table-bordered">
                <thead>
                    <tr class="table-light text-center">
                        <th>Item Name</th>
                        <th>My Price</th>
                        <th>Hey Gift</th>
                    </tr>
                </thead>
                <tbody>
                    @foreach (var st in Model)
                    {
                        <tr class="text-center">
                            <td asp-for="@st.Name">@st.Name</td>
                            <td asp-for="@st.Price">@st.Price</td>
                            <td asp-for="@st.GiftPackage">@Html.CheckBoxFor(m => st.GiftPackage)</td>
                        </tr>
                    }
                </tbody>
            </table>
            <input type="submit" value="CheckOut" class="btn btn-primary" />
        </div>
    </form>
</body>
</html>

А вот и MyCheckOut.cshtml:

@model List<double>
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Hello</title>
</head>
<body>
    <div class="table-responsive-sm table-hover">
        <table align="center" class="table table-bordered">
            <thead>
                <tr class="table-light text-center">
                    <th>Our Discount Numbers</th>
                </tr>
            </thead>
            <tbody>
                @foreach (var discounting in Model)
                {
                    <tr class="text-center">
                        <td>@discounting</td>
                    </tr>
                }
            </tbody>
        </table>
        </div>
</body>
</html>

Я ожидаю, что когда я отмечу только Red, индекс которого равен 0, то через тот же индекс 0, давайте получим экспозиционный массив [0], который равен 63.00 или когда я отмечу красные и синие, у которых эти индексы равны 0 и 2, то через те же индексы 0 и 2, давайте получим массив экспозиционный [0] и экспозиционный [2], которые равны 63 и 21.

Если я разверну все эти коды, моя таблица в Index.cshtml выглядит хорошо, и с другой стороны, все данные в порядке, когда я выбираю любой флажок, отправляющий и отправляющий свой выбор в MyCheckOut, элемент отсутствует.

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 23 апреля 2019

В ваших кодах есть несколько проблем, например, GiftPackage, а не GiftPacage на вашей странице.

Ключом к связыванию сложных объектов является то, что последовательный индекс в квадратных скобках добавляется кАтрибут имени поля формы в вашем случае.Поэтому измените ваш Index.cshtml как:

@for (int i = 0; i < Model.Count; i++)
{
  <tr class="text-center">
      <td asp-for="@Model[i].Name">@Model[i].Name</td>
      <td asp-for="@Model[i].Price">@Model[i].Price</td>
      <td asp-for="@Model[i].GiftPackage">@Html.CheckBoxFor(m => Model[i].GiftPackage)</td>
  </tr>
}

Другая проблема заключается в том, что метод findIndex() возвращает индекс первого элемента в массиве, который удовлетворяет предоставленной функции тестирования.Таким образом, вы получите несколько одинаковых значений, если множественный выбор сделан из флажка.Обновите код действия:

[HttpPost]
public IActionResult Index(List<SuperBowl> ceko)
{
    double[] exposalary = { 63.00, 42.00, 21.00 };
    var choosing = new List<double>();
    for (int i = 0; i < ceko.Count; i++)
    {
        if (ceko[i].GiftPackage ==true)
        {
            choosing.Add(exposalary[i]);
        }
    }


    return View("MyCheckOut", choosing);
}
...