繁体   English   中英

采取行动后,您如何向用户提供反馈?

[英]How do you give user feedback after an action was made?

用户使用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)。

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

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

哦,顺便说一句,如果您使用的是Automapper,并且看起来很不错(另一种不错的方法),则可以考虑将Mapper.CreateMap在动作本身之外的其他位置。 那里有一些开销。 希望能有所帮助。

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

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

您可以:

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

我只会用

TempData["StatusMessage"] = "Your messsaga"

您可以将tempdata用于仅在下一个请求之前需要的内容。

为所有这些东西为模型创建通用/辅助方法可能更好,例如:

  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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM