Нужно изменить данные и обновить эту же страницу при нажатии кнопки
Не могу понять как реализовать функцию, которая при нажатии кнопки будет принимать id и по нему изменять атрибут из моей таблицы. Код который я написал возвращает не существующую страницу, а мне надо чтобы он изменил данные и обновил ту же самую страницу. Что я делаю не так или тут не надо использовать ActionLin?
<tr>
<td>@Html.ActionLink("Изменить на готово", "EditToReady", new { id = o.ServiceId })</td>
<td>@o.ServiceId</td>
</tr>
Код в контролере
[HttpPost]
public RedirectResult EditToReady(int id)
{
Service sevice = EF.Services
.FirstOrDefault(g => g.ServiceId == id);
sevice.StatusOfOrder = "Готово";
EF.SaveChanges();
return Redirect("/Admin/Services");
}
Ответы (2 шт):
Допер, что надо было использовать HttpGet
[HttpGet]
public RedirectResult EditToReady(int id)
{
Service sevice = EF.Services
.FirstOrDefault(g => g.ServiceId == id);
sevice.StatusOfOrder = "Готово";
EF.SaveChanges();
return Redirect("/Admin/Services");
}
GET не рекомендуется использовать для обновления базы, т.к. он предназначается для получения (get) информации от сервера (GET Verb), такой запрос должен быть идемпотентен (свойство, при котором запрос может быть сделан несколько раз с одинаковыми параметрами и приведет к одну и тому же результату). Также такие запросы могут кешироваться браузерами/проксями, что приведет к выполнению запроса только один раз. Или если пользователь обновил страницу и запрос будет выполнен несколько раз. В вашем конкретном случае все эти пункты может не затрагивать вам, но это общепринятое соглашение, что GET запрос является "безопасным".
В вашем случае можно ссылку обернуть в форму, например:
<td>
<form asp-action="EditToReady" asp-controller="имя_контроллера">
<input type="submit" value="Изменить на готово" />
</form>
</td>
Или при помощи Html.BeginForm.