标签:
一、BaseController.cs文件
1.OnActionExecuting方法,该方法可以被各子Controller重写
1 protected override void OnActionExecuting(ActionExecutingContext filterContext) 2 { 3 //do this in OnActionExecuting instead of constructor to 4 //A) make sure the child class has fully initialized and 5 //B) that there is a valid request in context 6 7 // Apply a default title for the page, can be overridden in view or controller 8 ViewBag.Title = ControllerFriendlyName; 9 ViewBag.StudentSwitcherReturnUrl = GetStudentSwitcherReturnUrl(); 10 }
2.GetStudentSwitcherReturnUrl方法,该方法可以被各子Controller重写
1 protected virtual string GetStudentSwitcherReturnUrl() 2 { 3 return null; 4 }
二、后台Controller代码
1.如果一个Controller中只有一个Action需要在切换学生时满足该操作
例:ChangePassword页面
1 protected override string GetStudentSwitcherReturnUrl() 2 { 3 return Url.Action<ChangePasswordController>(c => c.Index(false)); 4 }
2.如果一个Controller中只有多个Action需要在切换学生时满足该操作
例:StudentAddress和Index,这两个Action都在ContactController中。在这种情况下就需要根据请求的Action名字进行判断。
1 protected override void OnActionExecuting(ActionExecutingContext filterContext) 2 { 3 base.OnActionExecuting(filterContext); 4 ViewBag.StudentSwitcherReturnUrl = filterContext.ActionDescriptor.ActionName == "StudentAddress" ? 5 Url.Action<ContactController>(c => c.StudentAddress()) : Url.Action<ContactController>(c => c.Index()); 6 }
三、前台页面代码
...... ...... //获取点击学生时需要跳转的URL即需要停留的当前页面的URL string studentSwitcherReturnUrl = ViewBag.StudentSwitcherReturnUrl; ...... ...... //包含该URL的超链接 @(Html.ActionLink<StudentSwitcherController>(studentName, c => c.Index(student.Id, studentSwitcherReturnUrl)))
四、实现思路
1.切换学生时页面还停留在当前页的本质:实质上是又进行了一次跳转,跳转到了当前页面!
2.由于每个Controller都继承自BaseController,因此在BaseController中定义ViewBag.StudentSwitcherReturnUrl,这样每个页面都可以使用StudentSwitcherReturnUrl。
3.在具体的每个需要操作的Controller中给StudentSwitcherReturnUrl赋值,赋值为具体的Link字符串。
4.这样在每个Controller对应的页面中就可以取得StudentSwitcherReturnUrl的值,再使用它转配成具体的超链接即可。
5.OnActionExcuting方法:在调用该Action之前调用该方法,执行其中的操作。
6.ActionExecutingContext类:提供 ActionFilterAttribute类的 ActionExecuting 方法的上下文。
它派生自ControllerContext,可以通过它获得该Action的信息。详见https://msdn.microsoft.com/zh-cn/library/system.web.mvc.actionexecutingcontext(v=vs.118).aspx
标签:
原文地址:http://www.cnblogs.com/sunshineground/p/4316104.html