, поэтому я хочу удалить часть данных, которая находится в списке. Пример, объясняющий это лучше:
У пассажира есть список забронированных рейсов. Теперь на странице пассажиров у меня есть возможность проверить их данные. поэтому я вхожу туда и вижу список забронированных рейсов. но тогда мне нужно удалить одну из его бронирований.
Вот проблема. Я не уверен, как это сделать, поскольку данные требуют двух разных наборов данных.
Страница сведений содержит информацию о пассажире, а также вызывает частичное представление всех его бронирований. Вот некоторый код.
Просмотр сведений о пассажире:
@model WebSite.Models.PassengerViewModels.PassengerDetialsViewModel
@{
ViewData["Title"] = "Details";
}
<h2>Details</h2>
<div>
<h4>PassengerDetailsViewModel</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.IdC)
</dt>
<dd>
@Html.DisplayFor(model => model.IdC)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Surname)
</dt>
<dd>
@Html.DisplayFor(model => model.Surname)
</dd>
<dt>
@Html.DisplayNameFor(model => model.FirstName)
</dt>
<dd>
@Html.DisplayFor(model => model.FirstName)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Email)
</dt>
<dd>
@Html.DisplayFor(model => model.Email)
</dd>
</dl>
</div>
<h4>Number of Flight: @Model.Flight.Count()</h4>
<partial name="_Flights" for="Flights" />
<div>
@Html.ActionLink("Edit", "Edit", new { id = Model.IdC }) |
<a asp-action="Index">Back to List</a>
</div>
Тогда мое частичное представление выглядит так:
@model IEnumerable<WebSite.Models.PassengerViewModels.FlightsViewModel>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.IdF)
</th>
<th>
@Html.DisplayNameFor(model => model.FNumber)
</th>
<th>
@Html.DisplayNameFor(model => model.Date)
</th>
<th>
@Html.DisplayNameFor(model => model.Duration)
</th>
<th>
@Html.DisplayNameFor(model => model.Destination)
</th>
<th>
@Html.DisplayNameFor(model => model.Attended)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.IdF)
</td>
<td>
@Html.DisplayFor(modelItem => item.FNumber)
</td>
<td>
@Html.DisplayFor(modelItem => item.Date)
</td>
<td>
@Html.DisplayFor(modelItem => item.Duration)
</td>
<td>
@Html.DisplayFor(modelItem => item.Destination)
</td>
<td>
@Html.DisplayFor(modelItem => item.Attended)
</td>
<td>
@Html.ActionLink("Delete", "DeleteF", new { Id = item.IdF })
</td>
</tr>
}
</tbody>
</table>
Затем здесь выполняется операция удаления в контроллере. называется DeleteF:
public async Task<IActionResult> DeleteF(int? IdC, int? IdF)
{
if (IdC == null && IdF == null)
{
return NotFound();
}
var flightBooking = await _context.Flights
.Select(a => new FlightsViewModel
{
IdC = a.IdC,
Email = a.Passenger.Email,
IdE = a.IdF,
Title = a.Flight.FNumber,
Attended = a.Attended
}).FirstOrDefaultAsync(e => e.IdC == IdC);
if (flightBooking == null)
{
return NotFound();
}
return View(flightBooking);
}
[HttpPost, ActionName("DeleteF")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmedF(int? IdC, int? IdF)
{
var flightBooking = await _context.Flights.FindAsync(IdC, IdF);
_context.Guests.Remove(flightBooking);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
Я знаю, что мне нужно передать два идентификатора в операцию удаления, но я не уверен, как передать идентификатор пассажира через частичное представление.
Редактировать:
Данные для бронирования рейсов находятся в собственном списке, который содержит составной ключ пассажира и рейса. вот почему мне нужно передать идентификатор пассажира с идентификатором рейса.
Также здесь есть страница «Удалить», если она вообще помогает:
@model WebSite.Models.PassengerViewModels.FlightsViewModel
@{
ViewData["Title"] = "DeleteF";
}
<h2>DeleteB</h2>
<h3>Are you sure you want to delete this?</h3>
<div>
<h4>FlightsViewModel</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.IdC)
</dt>
<dd>
@Html.DisplayFor(model => model.IdC)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Email)
</dt>
<dd>
@Html.DisplayFor(model => model.Email)
</dd>
<dd>
@Html.DisplayFor(model => model.IdF)
</dd>
<dt>
@Html.DisplayNameFor(model => model.IdE)
</dt>
<dt>
@Html.DisplayNameFor(model => model.FNumber)
</dt>
<dd>
@Html.DisplayFor(model => model.FNumber)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Attended)
</dt>
<dd>
@Html.DisplayFor(model => model.Attended)
</dd>
</dl>
<form asp-action="Delete">
<input type="hidden" asp-for="IdC" />
<input type="hidden" asp-for="IdF" />
<input type="submit" value="Delete" class="btn btn-default" /> |
<a asp-action="Index">Back to List</a>
</form>
</div>
Чтобы прояснить ситуацию. У меня есть 3 таблицы данных, с которыми я работаю. одна - это таблица пассажиров с Id C в качестве первичного ключа, вторая - это таблица рейсов, в которой IdF является первичным ключом, а последняя таблица - это таблица бронирования рейсов (я знаю, что в моем коде это должно быть слово), которая имеет составной ключ с Id C и IdF.
Edit 2:
Вот модель представления для пассажира:
namespace WebSite.Models.PassengerViewModels
{
public class PassengerDetialsViewModel
{
[Display(Name ="Passenger ID ")]
public int IdC { get; set; }
[Display(Name ="Surname ")]
[Required]
public string Surname { get; set; }
[Display(Name ="First Name ")]
[Required]
public string FirstName { get; set; }
[Display(Name ="E-mail Address ")]
[Required]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
public IEnumerable<FlightsViewModel> Events { get; set; }
}
}