我想在更新个人资料页面后向用户显示状态消息,以指示是否成功。这就是我所拥有的:
控制器
[HttpPost]
public ActionResult Profiles(UserProfile model)
{
try
{
_userRepository.UpdateUserProfile(model);
ViewBag.Message = "Success";
}
catch
{
ViewBag.Message = "Failure";
}
return View();
}
数据库通话
public void UpdateUserProfile(UserProfile user)
{
using (var connection = new SqlConnection(SQLSettings.GetConnectionString()))
{
var p = new DynamicParameters();
p.Add("@Id", user.Id);
p.Add("@City", user.City);
p.Add("@State", user.State);
connection.Execute("UpdateUserProfile", p, commandType: CommandType.StoredProcedure);
}
}
查看
@if (ViewBag.Message == "Success")
{
<div class="alert alert-success"><strong><span class="glyphicon glyphicon-check"></span> Your profile has been updated.</strong></div>
}
@if (ViewBag.Message == "Failure")
{
<div class="alert alert-danger"><span class="glyphicon glyphicon-alert"></span><strong> Error, please try again.</strong></div>
}
虽然这似乎对我有用,但我猜是有更合乎逻辑的方式?
答案 0 :(得分:1)
在这个用例中你应该考虑切换到PRG模式。 PRG代表 POST - REDIRECT - GET 。在成功完成事务之后的这种方法中(例如:更新用户记录),您将使用新位置向客户端浏览器返回重定向响应,并且浏览器将进行全新的http get调用以加载该GET操作方法。
您可以传递TempData以传输成功消息。如果成功完成操作时出现任何错误,您可以使用ModelState.AddModelErrorMethod
向模型状态字典添加错误。
[HttpPost]
public ActionResult Profiles(UserProfile model)
{
try
{
_userRepository.UpdateUserProfile(model);
TempData["Message"] = "Success";
return RedirectToAction("Profiles",new { id= model.Id });
}
catch
{
ModelState.AddModelError(string.Empty,"Some error happened");
return View(model);
}
}
现在在你的GET操作(Profiles?id = someId)中,你基本上需要检查TempData值并根据需要显示它。
如果出现错误,在视图(Profiles
)中,您可以使用Html.ValidationSummary
帮助程序方法显示我们添加到模型状态字典中的错误消息。