我从用户级别和员工级别获得相同的视图。当用户登录应用程序时,他会看到他的活动,并从Create
视图创建新活动。来自员工,他们将搜索用户并查看用户的信息,然后在同一Create
视图中代表用户创建新活动。
棘手就在这里,两个人都会看到Create
视图。当他们取消并保存时,他们必须返回上一页。
如何处理?
ex:
http://localhost/members/listActivities - for members
http://localhost/staff/memberinfo
To
http://localhost/members/create
答案 0 :(得分:2)
对于“取消”操作,您可以完全跳过服务器端参与,并使用JavaScript将浏览器定向到以前的位置。 (这有额外的好处是支持将来从另一个地方来到那里的任何人。)像这样:
<input type="button" value="Cancel" id="cancelButton" />
<!-- and later... -->
<script type="text/javascript">
$('#cancelButton').click(function () {
window.history.back();
});
</script>
对于“保存”操作,您是否可以在服务器上识别出他们所使用的“类型”用户并相应地指导他们?如果没有,也许您需要在创建操作首先响应视图时跟踪它们的来源。也许该动作可以接受重定向作为参数?像这样:
public ActionResult Create(string redirectUrl)
然后,您可以将该参数添加到“创建”视图模型,将其存储在隐藏字段或具有该性质的某些内容中。当您在保存时回发到创建操作时,您将在该参数集中再次包含它并将其用于重定向(当然,如果它是空的,则默认为特定页面)。
然后,只要您有@Html.ActionLink
到Create
,就会将redirectUrl
作为路线值。
修改为了完整性,正如Oliver在下面的评论中所提到的,您可以尝试通过Request.UrlReferrer
识别控制器操作中的上一页。这将用于Create
的非帖子调用,以自动填充将在后调用中返回的隐藏字段。 (因为在帖子调用中,引用者是页面本身,因此没有用处。)请记住这里有两个主要内容:
redirectUrl
作为路由值的情况。答案 1 :(得分:0)
你可以在你的UserViewModel中添加一个名为IsStaff的属性。它将是一个布尔值。对于职员用户来说这是真的,否则它将是假的。然后在做你的创建功能之后你将得到你当前用户的IsStaff值和在if条件下检查它并将它们重定向到不同的行为。
public bool IsStaff{get;set;}
对于Create:
public ActionResult Create()
{
...//do creation here
if(UserRepository.GetUserByUsername(User.Identity.Name).IsStaff==true)
return RedirectToAction("staff","memberinfo");
else
return RedirectToAction("members","listActivities");
return View();
}