Ситуация
Внутри моего проекта ASP.NET у меня есть представление, позволяющее пользователю изменить свой пароль.После отправки формы пользователь будет перенаправлен на UserDetail, используя RedirectToAction
.Здесь я хочу уведомить пользователя, если смена пароля прошла успешно или нет (планируется использовать Alertify JS ).Тем не менее, я не могу передать сообщение от моего контроллера моему представлению.
Как правильно передать данные (простую строку) из контроллера в представление при использовании RedirectToAction
без использованияViewBag
, ViewData
, Tempdata
, ...?Или, если есть способ решить мои текущие трудности с этим, рад слышать.
ViewBag
/ ViewData
: не может использоваться с тех порЯ возвращаю RedirectToAction
, где не могу передать его в URL вместо View
.Я рассмотрел использование Ajax
для возврата JSON
вместо использования RedirectToAction
, что позволило бы мне использовать ViewBag
, но это вызывает некоторые трудности и изменило бы общую структуру проекта.
TempData
: у меня не настроен session
в моем Startup.cs
, и я не могу этого сделать, так как мне не хватает пространства имен Microsoft.AspNetCore.Session
.Я также не могу добавить пространство имен, так как это добавляет некоторые сложности.См. Следующую ошибку: System.TypeLoadException: 'Method 'ConfigureAppConfiguration' in type 'Microsoft.AspNetCore.Hosting.WebHostBuilder' from assembly 'Microsoft.AspNetCore.Hosting, Version=1.0.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' does not have an implementation.'
Я бы предпочел не работать с файлами cookie или какой-либо другой системой обналичивания.
РЕДАКТИРОВАТЬ: Я бы такжеЯ не использую строку запроса, но, увидев комментарии / ответы, я понимаю, что мои возможности ограничены.Я забыл добавить параметр строки запроса / маршрута в список ранее.
ManageController.cs
[HttpGet]
public IActionResult UserDetail(int id)
{
// Code to GET the UserViewModel
return View(model);
}
[HttpGet]
public IActionResult UserPassword(int id)
{
// Code to GET the UserViewModel
return View(model);
}
[HttpPost]
public IActionResult UserPassword(UserViewModel model)
{
// Code to check and save the password.
if (user.Password == model.Password) {
//ViewData["Message"] = "Succeeded";
//TempData["Message"] = "Succeeded";
} else {
//ViewData["Message"] = "Failed";
//TempData["Message"] = "Failed";
}
// TODO: Alert the user
return RedirectToAction("UserDetail", new { id = model.UserId });
}
UserDetail.cshtml
<!-- Some view code -->
<form>
<button class="ui button button-back" type="button" onclick="window.location.href = '@Url.Action("UserPassword", "Manage", new { id = Model.UserId })';">Change Password</button>
</form>
<!-- Trying to use ViewData -->
@*<div id="id-message" data-value="@ViewData["Message"]"></div>*@
<script>
$(document).ready(function () {
console.log("Ready");
// Alert the user of a password change
//var message = $("#id-message").attr("data-value");
//var message = "@(TempData["Message"] as string)";
if (message !== null && message !== "") {
alertify
.alertmessage, function () {
alertify.message('OK');
};
}
});
// Some script code
</script>