返回成功/失败消息以在数据库更新后查看

时间:2016-11-11 01:16:05

标签: c# asp.net asp.net-mvc

我想在更新个人资料页面后向用户显示状态消息,以指示是否成功。这就是我所拥有的:

控制器

[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>
}

虽然这似乎对我有用,但我猜是有更合乎逻辑的方式?

1 个答案:

答案 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帮助程序方法显示我们添加到模型状态字典中的错误消息。