在 MVC 中开机自检后消息反馈的最佳实践 ASP.NET
本文关键字:最佳 NET ASP MVC 开机自检 消息 | 更新日期: 2023-09-27 17:55:57
我正在努力找到一种在 POST 后反馈消息的好方法。
例如,我有这些方法
public ActionResult Index(int id)
{
Model model = getModel(id);
return View(model);
}
[HttpPost]
public ActionResult Save(Model model)
{
Result result = saveModel(result)
if (Result.Status != Status.SUCCESS)
{
...
}
else if(Result.Status != Status.FAILURE)
{
...
}else
{
...
}
return RedirectToAction("Index");
}
和结果类具有消息属性
public class Result
{
...
public string Message{get;set;}
}
因此,当我调用 .../Controller/Index/1 时,将显示我的索引视图,并且此视图有一个调用"保存操作"的提交按钮,但如果业务层出现问题,我想显示错误/警告消息。
那么,关键是解决这种情况的最佳方法是什么?
我读过一些推荐TempData的文章,其他推荐ViewData的文章,将消息传输到索引视图。
让我分享一个我开发的一个项目的 ChangePassword 操作示例:
[HttpPost]
public ActionResult ChangePassword(LoginModel model)
{
if (ModelState.IsValid && _userService.ChangePassword(model.Password, model.NewPassword))
ViewBag.SuccessMessage = UI.PasswordChanged;
else
ModelState.AddModelError("Password", ErrorMessages.InvalidPassword);
return View(model);
}
请记住,如果您要重定向到另一个操作,ViewBag 将不起作用。如果要跨一个请求保留信息,则必须使用 TempData。
对于失败,您应该使用
ModelState.AddModelError("", "The error message");
因为它会自动被Html.ValidationSummary(true)
拾取(自动添加到所有视图中)
对于通知,您可以使用TempData
或ViewBag
。
但是,我不鼓励您重定向所有内容。相反,让用户有机会纠正任何错误(即使是生成这些错误的业务层)。使用类似以下内容:
[HttpPost]
public ActionResult Save(Model model)
{
if (!ModelState.IsValid)
return View(model);
Result result = saveModel(result)
if (Result.Status == Status.SUCCESS)
return RedirectToAction("Index");
if (Result.Status != Status.FAILURE)
{
ModelState.AddModelError("", "Ooops, failed");
}
else
{
ModelState.AddModelError("", "Some other error");
}
return View(model)
}