在我的要求中,所有视图都应该能够根据控制器中的操作中发生的情况显示通知。目前的实现是在一个 BaseModel 中,它被所有需要显示通知的模型继承。然后,任何具有此要求的视图只需调用:
@{ Html.RenderPartial("MessageCtrl", Model); }
并呈现通知。这在 Action 直接返回视图的情况下工作正常,并且通常在 Action 中像这样处理:
model.SetMessage(response);
return View(model);
...其中 SetMessage 从我的服务返回的对象更新模型的通知相关属性。所有响应都实现了我创建的称为 IResponse 的接口,因此可以在整个过程中处理消息传递。
当我需要从不同的操作返回视图并仍然显示通知时,问题就出现了。
例如,在我的 EditUser 操作中,如果编辑成功,我想显示 Index 视图。为了从 EditUser 操作中实现这一点,我需要返回 RedirectToAction(因为简单地返回视图将返回正确的视图,其 URL 不正确,表明它不是 EditUser)。但是,RedirectToAction 失去了我的模型和 BaseModel 的所有概念,所以当它重定向时,它已经失去了我的通知。我知道我可以使用 RouteValues,但这违背了拥有通用基础模型驱动通知方法的目的。我什至查看了 ViewBag(通常我将其视为 MVC 的丑陋部分),但发现 ViewBag 仅在单个请求的生命周期内持续存在,并且使用 RedirectToAction,ViewBag 在到达目标时再次为空行动。另一个想法是将它存储在会话对象中,
这似乎是一个非常标准的要求。除了通过 RedirectToAction 的查询字符串之外,是否有一种标准化的方法可以将通用数据(如通知)传递到不同的视图?