[英]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.