根据我的要求,所有视图都应该能够根据控制器中Actions内发生的事件显示通知。现有的实现是在BaseModel中,所有需要显示通知的模型都会继承它。然后,任何具有此要求的视图都会调用:
@{ Html.RenderPartial("MessageCtrl", Model); }
并发布通知。这在Action直接返回视图的情况下工作正常,并且通常在Action:
中处理model.SetMessage(response);
return View(model);
...其中SetMessage从我的服务返回的对象更新模型的通知相关属性。所有响应都实现了我创建的一个名为IResponse的接口,因此可以在整个过程中处理消息传递。
当我需要从其他操作返回视图并仍然显示通知时,问题就出现了。
例如,在我的EditUser操作上,如果编辑成功,我想显示索引视图。要从EditUser操作实现这一点,我需要返回RedirectToAction(因为只返回视图将返回正确的视图,错误的URL指示它不是EditUser)。但是,RedirectToAction丢失了我的模型和BaseModel的所有概念,所以当它重定向时,它已经丢失了我的通知。我知道我可以使用RouteValues,但这违背了通用基础模型驱动通知方法的目的。我甚至看过ViewBag(通常我把它视为MVC的丑陋部分),但发现ViewBags仅持续一个请求的生命周期,并且使用RedirectToAction,ViewBag在到达目标时再次为空行动。另一个想法是将它存储在会话对象中,但这对我来说听起来很难看。
这似乎是一个非常标准的要求。是否存在通过RedirectToAction通过查询字符串传递公共数据(如通知)的标准化方法?
答案 0 :(得分:1)
我认为您正在寻找TempData
,它只会在一次重定向中保留会话中的数据。