После того, как вы исправили свою форму (в том, что Вы отправляете обратно маршрут по умолчанию вашего приложения (по умолчанию HomeController.Index()
метод), отправив запрос /, вместо того, чтобы ваш метод Create
), вы на самом деле правильно добавлять значение в ваш список. Проблема в том, что это значение остается только для текущего запроса.
Чтобы сделать вещи постоянными, вам необходимо рассмотреть уровень сохранения в памяти, в базе данных или в сеансе. Я предоставил полный образец ниже, который использует сеанс, который предоставит вам экземпляр списка для каждого пользователя. Без этого уровня ваш контроллер будет регулярно удаляться после того, как действие завершит обработку, и поэтому поправки к вашему списку не сохраняются. Это обычный жизненный цикл запроса в ASP.NET и имеет смысл, если учесть, что ваше приложение в основном имеет дело только с 1 запросом за раз. Важно отметить, что создание чего-то static
не является одной из форм персистентности, поскольку его срок службы и надежность неоспоримы. Он будет работать, но как только ваш пул приложений будет перезагружен (т. Е. Приложение будет уничтожено и перезагружено в памяти), вы снова потеряете все изменения в своем списке.
Я бы предложил вам прочитать на Session State, чтобы точно понять, что происходит внизу. Вкратце, каждому пользователю/уникальному посетителю приложения на вашем сайте будет предоставлен уникальный «идентификатор сеанса», вы можете использовать этот идентификатор сеанса для хранения данных, которые вы хотите использовать на стороне сервера. Вот почему, если вы хотите посетить свой метод Create
из отдельных браузеров (или попробовать частный режим), вы будете поддерживать два отдельных списка данных.
View (который также выводит список пользователю):
@model List<string>
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
<ul>
@foreach(var str in Model)
{
<li>@str</li>
}
</ul>
@using (Html.BeginForm())
{
<input type="text" name="txt" />
<input type="submit" />
}
содержимое контроллера:
public List<string> MyList
{
get
{
return (List<string>)(
// Return list if it already exists in the session
Session[nameof(MyList)] ??
// Or create it with the default values
(Session[nameof(MyList)] = new List<string> { "element1", "element2", "element3" }));
}
set
{
Session[nameof(MyList)] = value;
}
}
public ActionResult Create()
{
return View(MyList);
}
[HttpPost]
public ActionResult Create(string txt)
{
MyList.Add(txt);
return View(MyList);
}
.. что не работает? Кажется, что это работает отлично (если ваш атрибут '
@RudiVisser Это просто не добавление в список –
@RobertRoss What вы имеете в виду «не добавлять»?Во втором запросе 'myList' содержит только значения по умолчанию? – feeeper