У меня проблема с чем-то явно простым, однако все ответы, которые я нахожу в SO и Google, неприменимы.Отобразите сообщение с подтверждением после сообщения с RedirectToAction и без TempData
Я создаю страницу MVC для существующей системы, которая требует:
- начальный Получить метод передать два параметра (что позволяет «контекст» страницы) -
jobId
иparentId
. - состояние сеанса отключено, поэтому
TempData
не является вариантом.
Итак, у меня есть метод Index(), который строит модель на основе двух параметров и данных из БД.
public ActionResult Index(int jobId, int? parentId = null)
{
//build model based on Id params
var model = new JobModel
{
...
};
return View(model);
}
мнение имеет несколько форм на нем, которые позволяют какие-либо действия проводились на модели (добавлять файлы, удалять файлы)
@using (Html.BeginForm("AddNewFiles", "Home", FormMethod.Post, new {enctype = "multipart/form-data"}))
{
@Html.HiddenFor(m => m.JobId)
@Html.HiddenFor(m => m.ParentId)
@Html.TextBoxFor(m => m.AdditionalFiles, new {type = "file", multiple = "true"})
@Html.ValidationMessageFor(m => m.AdditionalFiles)
<input type="submit" name="SubmitNewFiles" id="SubmitNewFiles" value="Upload"/>
}
Представление этой формы перемещает меня в нужное сообщение действие
[HttpPost]
public ActionResult AddNewFiles(JobModel jobModel)
{
if (!ModelState.IsValid)
{
throw new InvalidDataException(message: "Model is invalid");
}
//doing some stuff with the files here
//...
//now I want to get back to the initial page with forms etc, however show a temporary label somewhere saying that 'something happened OK'
return RedirectToAction("Index", routeValues: new RouteValueDictionary(values: new
{
jobId = job.Id,
parentId = job.OrganizationId
}));
}
Проблема в том, что я не знаю, как я могу показать сообщение на странице. Как я уже сказал, я не могу использовать TempData
(это 50% ответы).
Другие решения включают в себя return View("Index")
вместо return RedirectToAction("Index")
- однако в данном случае я не знаю, как я мог бы передать соответствующие параметры для моего Index(int jobId, int? parentId = null)
метода, так что обновленная модель может быть сгенерирован.
Я только начинаю с MVC, поэтому, я полагаю, ответ довольно прост, однако все, что я нашел, не применимо в моем случае, я думаю. Ура!
Вы всегда можете просто добавить еще один параметр 'строку message' в файл' Index() 'метода и передать его в' routeValues' –
Я думал об этом ... но - у меня будет ок. 5 форм, каждый из которых должен отображать другое сообщение, поэтому я хотел, чтобы сообщения отображались в разных местах (над каждой соответствующей формой). Кроме того, если я добавлю его в routeValues, он появится в ссылке, правильно? (Я не хочу, чтобы это произошло) – Bartosz
Тогда у вас нет другого выбора, кроме как сохранить его где-нибудь (например, базу данных). Но почему у вас есть 5 форм в представлении, которые предлагают проблему с вашим дизайном? –