Я написал класс и установил общедоступный индекс 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>
Я ожидаю, что когда я отмечаю только красный, индекс которого равен 0, затем через тот же индекс 0, давайте получим массив exposalary [0], который равен 63,00. или когда я отмечаю красный и синий, эти индексы равны 0 и 2, затем через те же индексы 0 и 2, давайте получим массив exposalary[0] и exposalary[2], которые равны 63 и 21.
Если я разверну все эти коды, в Index.cshtml моя таблица выглядит хорошо, и все данные в порядке, с другой стороны, когда я выбираю отправку любого флажка и отправляю свой выбор в MyCheckOut, элемента нет.
Пожалуйста, помогите мне.





В ваших кодах есть несколько проблем, например, это 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);
}
Написание класса и имени элемента, здесь может быть проблема, вы правы, но ваше решение точно верно. Спасибо большое. Я вижу, что моя проблема заключается в настойчивом использовании List.Select, а не List[i]. Вот моя главная вина. Спасибо, сэр.