Вы должны держать объект модели вне метода действия, он должен быть доступен из разных методов.
Я бы пошел с чем-то вроде этого:
public class TrainManagerController : Controller
{
// the train list is set at Controller level
private List<Trains> TrainList;
// and populated when the controller is instantiated
public TrainManagerController(List<Trains> trainList)
{
TrainList = trainList;
}
// this calls the view with the train list you have at the moment
public ViewResult Index()
{
return View(TrainList);
}
// this deletes the train, then calls the index view.
public RedirectToRouteResult DeleteFromList(int TrainNumber)
{
TrainList.Remove(TrainList.FirstOrDefault(t => t.tno == TrainNumber));
return RedirectToAction("Index");
}
}
По виду:
@foreach (var item in @Model)
{
<tr style="color: blue">
<td>@item.tname</td>
<td>@item.tno</td>
<td>@item.from</td>
<td>@item.to</td>
<td> @Html.ActionLink("Delete", "DeleteFromList", new {TrainNumber = item.tno})</td>
</tr>
}
Однако отсутствует часть: как передать объект List<Trains>
в аргументы конструктора? Обычно это делается с помощью Dependency Injection , где - в подобных случаях - также реализуется соединение с БД, поэтому вы запрашиваете интерфейс (назовем его здесь ITrains), а правильно настроенный сторонний компонент дает вам Список населенных пунктов.
Я знаю, что эта тема может вызвать у вас головную боль, поэтому вы можете ее кратко пропустить, пока не разберетесь с основами работы контроллеров и методов действий и не создадите этот объект по-другому:
Создайте новый класс TrainContext
, который будет хранить список поездов и будет иметь методы для работы с этим списком (вам нужно удалить, помните?):
public class TrainContext
{
private static List<Trains> trainList = null;
public TrainContext()
{
if (trainList == null)
{
trainList = new List<Trains>();
trainList.Add(new Trains() { tname = "vaigai", tno = 123, from = "Chennai", to = "trichy" });
trainList.Add(new Trains() { tname = "express", tno = 456, from = "banglore", to = "chennai" });
}
}
public List<Trains> GetTrains()
{
return trainList;
}
public void Delete(int TrainNumber)
{
if (trainList.Count > 0)
trainList.Remove(trainList.FirstOrDefault(t => t.tno == TrainNumber));
}
}
так что вы можете просто вызывать этот статический список в любое время, когда запрашивается контроллер TrainManager. Теперь мы должны изменить контроллер соответственно
public class TrainManagerController : Controller
{
private TrainContext context;
public TrainManagerController()
{
context = new TrainContext();
}
public ViewResult Index()
{
return View(context.GetTrains());
}
public RedirectToRouteResult DeleteFromList(int TrainNumber)
{
context.Delete(TrainNumber);
return RedirectToAction("Index");
}
}
Теперь у вас есть объект, который будет последовательно хранить список ваших поездов, и вы можете делать с ним все, что захотите.