Portal系统中当且换学生时仍旧停留在当前页面的实现方法

一、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

时间: 2024-07-31 08:10:13

Portal系统中当且换学生时仍旧停留在当前页面的实现方法的相关文章

Windows系统中Xshell与Linux连接时遇到的问题

前提条件:在Windows系统中已经安装了Xshell,并且安装了虚拟机软件和Linux系统 步骤1.在Linux系统中root用户下,使用ifconfig命令查看虚拟系统Linux的IP地址.如图1 图1 步骤2.打开Xshell,创建连接,在新建会话属性对话框中,登记连接的名字,选择使用的协议,以及需要连接的虚拟机IP地址.如图2 图2 当连接建立好,只需根据提示输入用户名和密码就可以在Xshell终端使用Linux系统. 下面讨论当连接不能连接时,需要在哪许方面找原因: 原因1:虚拟机网络

android系统中,点击EditText时,隐藏系统软键盘,显示光标

因为项目中要用自定义的随机键盘,所以必须得屏蔽系统软键盘,但是在4.0的测试系统来看,使用editText.setInputType(InputType.TYPE_NULL)方法固然能隐藏键盘,但是光标也会隐藏,所以无法使用. 3.0以下版本可以用editText.setInputType(InputType.TYPE_NULL)来实现.或者设置editText.setKeyListener(null)来实现.3.0以上版本除了调用隐藏方法setShowSoftInputOnFocus(fals

关于win7系统中所有exe文件都被以word方式打开的解决方法

手残一刻,电脑桌面所有的软件快捷方式都变成了word的打开方式,鼠标右键选中某exe文件也没打开方式那个选项, 第一次尝试: 在控制面板——默认程序中修改默认打开方式,但是没有找到解决方法 第二次尝试: 万能的重启,你会发现,并没有卵用的…… 第三次尝试: 使用ctrl+alt+delete调出任务管理器,不要妄图使用在任务栏——右键——打开任务管理器,也同样只会是word方式打开,不停的报错,你想要关都关不掉,所以不用理会他,只管使用任务管理器,看到帖子上有人说:“结束掉explorer这个任

Linux系统中提示/usr/bin/ld: cannot find -lxxx错误的通用解决方法

在linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息: 代码如下: /usr/bin/ld: cannot find -lxxx 这些讯息会随着编译不同类型的source code 而有不同的结果出来如: 代码如下: /usr/bin/ld: cannot find -lc/usr/bin/ld: cannot find -lltdl/usr/bin/ld: cannot find -lXtst 其中xxx即表示函式库文件名称,如上例的:libc.so.libl

Windows系统中python3.7安装数据可视化模块Matplotlib、numpy的各种方法汇总

安装环境:Windows10 64位Python3.7 32位 确保已经安装PIP工具命令窗口输入PIP出现以下窗口说明PIP已经成功安装 方法1:(1)在Matplotlib的官网下载电脑对应的版本,网址为:https://pypi.org/project/matplotlib/#files.(2)将在下载的.whl文件放在python的安装目录中Scripts目录下 (3)cmd打开命令提示符,切换到刚才的目录下.![切换目录](https://img-blog.csdnimg.cn/201

mui--使用mui中的图文表格组件时出现一条横线的解决方法

最近做的微信公众号点击链接跳转到H5页面,该H5页面使用mui做的,遇到的商品列表页出现一个横线的问题, 这个是修改前的图片 解决方法: <style type="text/css">            /* 去掉了图文表格中出现的一条横线 */            .before_hide:before {                  display: none;              }              .after_hide:after {

解决ArcMap启动时只停留在初始化界面的方法

来自:https://www.cnblogs.com/luwl/p/6899342.html 方法1 修改环境变量TEMP和TMP为C:\Temp 重启ArcMap. 方法2 关闭系统进程Print Spooler. 打开C:\WINDOWS\system32\spool\PRINTERS,删除里面的所有文件. 启动系统进程Print Spooler. 重启ArcMap. 方法3 修改安装路径C:\Program Files (x86)\Common Files\ArcGIS\Desktop10

Win7系统中哪些服务可以关闭?

Win7系统中很多服务和进程其实大家在平时都用不上,这些服务和进程不仅占用了很大部分的资源,而且还会影响系统的运行速度和安全.我们可以关闭那些不常用的服务和进程来加快系统运行速度,但对于一般的用户来说可能不太清楚哪些是可关闭,哪些是不可关闭的,因此下面我们就来详解下Win7系统中可以关闭的服务. Win7系统查看服务的方法:点击开始--运行--输入services.msc--回车. 1.Application Management 该服务主要适用于大型企业环境下的集中管理,普通用户关了没什么影响

Linux——解决RedHat6/CentOS6系统中“弹出界面eth0:设备似乎不存在”的问题

刚刚在自己的CentOS6系统中执行service network restart时,竟然提示: 弹出界面 eth0: 设备 似乎不存在, 初始化操作将被延迟.   [失败] 这事可真神奇.于是手动编辑网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,根据自己的忘记进行了一番设置,再次执行service network restart,竟然又弹出一个: 弹出界面 eth0: 错误:没有找到合适的设备:没有找到可用于连接 'eth0' 的设备. 后来发