Asp.net mvc 是否从MVC4中的不同视图或控制器重定向到上一个视图?
我从用户级别和员工级别都有相同的观点。当用户登录到应用程序时,他会看到自己的活动,并从Asp.net mvc 是否从MVC4中的不同视图或控制器重定向到上一个视图?,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我从用户级别和员工级别都有相同的观点。当用户登录到应用程序时,他会看到自己的活动,并从Create视图创建新活动。员工将搜索用户并查看用户信息,然后在相同的Create视图中代表用户创建新活动 棘手的是,两者都进入不同的视图来查看Createview。当他们取消并保存时,他们必须返回上一页 如何处理 ex: http://localhost/members/listActivities - for members http://localhost/staff/memberinfo To h
Create
视图创建新活动。员工将搜索用户并查看用户信息,然后在相同的Create
视图中代表用户创建新活动
棘手的是,两者都进入不同的视图来查看Create
view。当他们取消并保存时,他们必须返回上一页
如何处理
ex:
http://localhost/members/listActivities - for members
http://localhost/staff/memberinfo
To
http://localhost/members/create
对于“取消”操作,您可以完全跳过服务器端的参与,并使用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)
然后可以将该参数添加到创建视图模型中,将其存储在隐藏字段或类似的内容中。当您在save上发回Create操作时,您将再次将其包含在该参数集中,并将其用于重定向(当然,如果为空,则默认为特定页面)
然后,每当您有一个@Html.ActionLink
到Create
时,您都会包含一个重定向URL
作为路由值
编辑:为了完整起见,正如Oliver在下面的评论中提到的,您可以尝试通过Request.urlreferer
来识别控制器操作中的上一页。这将在对Create
的非post调用中使用,以自动填充post调用中返回的隐藏字段。(因为在post call中,推荐人是页面本身,所以这不会有帮助。)不过,请记住这里的两个要点:
重定向URL
作为路由值的情况您可以向UserViewModel添加一个名为IsStaff的属性。它将是一个布尔属性。对于员工用户,它将为true,否则为false。然后在执行创建函数后,您将获得当前用户的IsStaff值,并在if条件下检查它,并将它们重定向到不同的操作
public bool IsStaff{get;set;}
对于创建:
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();
}
可能值得在请求时添加一些内容。URLreferer?@Oliver:我考虑过,但这有多可靠?除非框架正在做一些事情来绕过它,否则浏览器可能不会包含引用者。