在采取行动后,您如何给予用户反馈?

时间:2011-04-27 01:33:27

标签: asp.net-mvc asp.net-mvc-3

使用asp.net mvc,用户更新他的个人资料。这是我的更新操作的外观:

    [HttpPost]
    public ActionResult EditUser(string id, UserEditViewModel model)
    {
        Mapper.CreateMap<UserEditViewModel, SimpleUser>();
        var user = Mapper.Map<UserEditViewModel, SimpleUser>(model);

        userService.EditUser(user);

        //Re-populating the countries.
        var countries = geoService.GetCountries();
        model.Countries = countries.Select(c => new SelectListItem { Text = c.Name, Value = c.CountryId.ToString() });


        return View(model);
    }

首先,我这样做是否正确?通过编写两次填充代码的国家(GET中为1,此处为1)。

其次,如何向用户提供他们已成功更新其个人资料的某种形式的反馈?

5 个答案:

答案 0 :(得分:2)

由于您已经为用户编辑页面创建了一个特定的视图模型(顺便说一下,很好的方法),我实际上会将该消息添加为该视图模型本身的属性。毕竟,它专门用于包含您的视图的数据,那么为什么通过将一个键/值对放入ViewData来使事情变得复杂/增加不一致性?这就是我至少看到它的方式。

哦,顺便说一下,如果你使用Automapper,看起来你是(另一种不错的方法),你可以考虑把你的Mapper.CreateMap放在除动作本身之外的某个地方。那里有一点开销。希望有所帮助。

答案 1 :(得分:1)

是的,我们通常需要两次查询,首先填充屏幕,第二次重新填充。您始终可以在第一次检索时缓存值,并使用回发操作上的缓存值重新填充屏幕。

在ViewData(MVC-2)或ViewBag(MVC-3)中设置您的消息并显示给用户。

答案 2 :(得分:1)

你可以:

  • 重定向到包含“更新成功”消息的其他视图
  • 重定向到“详细信息”视图(他们会理解并“看到”他们的更改已保存)
  • 通过ViewData / ViewBag将消息传递给视图,然后视图就会显示此信息。
    您甚至可以在布局页面中使用该逻辑,以便任何视图都可以在屏幕顶部显示消息,或类似的内容。

答案 3 :(得分:0)

为所有这些东西创建一个模型的公共/帮助方法可能更好,例如:

  private void SetupCountries() {
       //Re-populating the countries.
       var countries = geoService.GetCountries();
       model.Countries = countries.Select(c => new SelectListItem { Text = c.Name, Value = c.CountryId.ToString() });
  }

然后在控制器中的所有操作中,您只需调用它而无需再次键入这些代码。

  public ActionResult EditUser(.... {
     SetupCountries();

答案 4 :(得分:0)

我会用

TempData["StatusMessage"] = "Your messsaga"

您可以将tempdata用于下次请求之前所需的内容。