一、BaseController.cs文件

1.OnActionExecuting方法,该方法可以被各子Controller重写

 protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
//do this in OnActionExecuting instead of constructor to
//A) make sure the child class has fully initialized and
//B) that there is a valid request in context // Apply a default title for the page, can be overridden in view or controller
ViewBag.Title = ControllerFriendlyName;
ViewBag.StudentSwitcherReturnUrl = GetStudentSwitcherReturnUrl();
}

2.GetStudentSwitcherReturnUrl方法,该方法可以被各子Controller重写

 protected virtual string GetStudentSwitcherReturnUrl()
{
return null;
}

二、后台Controller代码

1.如果一个Controller中只有一个Action需要在切换学生时满足该操作

例:ChangePassword页面

 protected override string GetStudentSwitcherReturnUrl()
{
return Url.Action<ChangePasswordController>(c => c.Index(false));
}

2.如果一个Controller中只有多个Action需要在切换学生时满足该操作

例:StudentAddress和Index,这两个Action都在ContactController中。在这种情况下就需要根据请求的Action名字进行判断。

  protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
ViewBag.StudentSwitcherReturnUrl = filterContext.ActionDescriptor.ActionName == "StudentAddress" ?
Url.Action<ContactController>(c => c.StudentAddress()) : Url.Action<ContactController>(c => c.Index());
}

三、前台页面代码

......
......
//获取点击学生时需要跳转的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

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

  1. Linux 系统中用户切换

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

  2. Linux 系统中用户切换(su user与 su - user 的区别)

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

  3. linux系统中用户切换

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

  4. 在OS X系统中php访问sftp时需要ssh2扩展的安装

    php -v brew install homebrew/php/php55-ssh2 [实现方式] <?php $connection = ssh2_connect('192.168.0.14 ...

  5. vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法

    原文:http://www.jb51.net/article/129270.htm main.js入口文件配合vue-router写这个 router.afterEach((to,from,next) ...

  6. Titanium中调用ios组件时语言不是本地化的解决方法

    用Titanium开发的ios应用中,当调用系统组件时,尽管手机已经设置了系统语言为中文,但那些组件的界面却仍为英文.比如调用iphone中的相册组件,其界面为: 那么怎么让它跟系统语言保持一致呢? ...

  7. 织梦系统中出现DedeTag Engine Create File False提示原因及解决方法

    今天更新网站时dedecms系统时,遇到一个问题:DedeTag Engine Create File False  出现这样的提示. 其实这也不算是什么错误,我个人觉得最重要的一点就是根目录下没有给 ...

  8. Android中的EditText默认时不弹出软键盘的方法

    方法一: 在 AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为 adjustUnspecified|stateHidden <a ...

  9. 64位win10系统中无法开启vmware的VT-X嵌套虚拟化功能的解决方法

    在升级了win10操作系统之后,发现Vmware Workstation在安装64位操作系统虚拟机的或者要使用Intel VT-X/EPT的时候,会一直弹出vt-x被禁用的提示,如下图:       ...

随机推荐

  1. Throw是一个语句,用来做抛出例外的功能

    当我们自己定义一个例外类的时候必须使其继承excepiton或者RuntimeException. Throw是一个语句,用来做抛出例外的功能. 而throws是表示如果下级方法中如果有例外抛出,那么 ...

  2. 算法优化:rgb向yuv的转化最优算法

    朋友曾经给我推荐了一个有关代码优化的pdf文档<让你的软件飞起来>,看完之后,感受颇深.为了推广其,同时也为了自己加深印象,故将其总结为word文档.下面就是其的详细内容总结,希望能于己于 ...

  3. 【BZOJ】1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1633 一开始也想到了状态f[i]表示i以后的字符串最少删的数 然后想到的转移是 f[i]=min{f ...

  4. 【BZOJ】1620: [Usaco2008 Nov]Time Management 时间管理(贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1620 一开始想不通啊.. 其实很简单... 每个时间都有个完成时间,那么我们就从最大的 完成时间的开 ...

  5. Java 执行linux scp 远程获取文件和上传

      需要的jar包:ganymed-ssh2-build210.jar import java.io.ByteArrayOutputStream;import java.io.File;import ...

  6. apacheserver全局配置具体解释

    server标识相关指令: ServerName ServerAdmin ServerSignature ServerTokens UseCanonicalName UseCanonicalPhysi ...

  7. C#,C++Dll文件调用心得

    C#下: 1.新建-->项目-->控制台应用程序:填写各种名称之后项目新建成功:一下为默认生成方式. 2.如下,在Program.cs中添加如下代码: using System;using ...

  8. shell脚本学习总结01--文件描述符和重定向

    文件描述符是与文件输入和输出的相关联的整数,它们用来追踪已打开的文件,文件描述符0,1,2是系统预留的. 0 --> stdin (标准输入) 1 --> stdout (标准输出) 2 ...

  9. 转载hiberinate的懒加载

    Hibernate的强大之处之一是懒加载功能,可以有效的降低数据库访问次数和内存使用量.但用的不好就会出现org.hibernate.LazyInitializationException. 这个异常 ...

  10. kubernetes使用中遇到的坑

    随着kubernetes的发展现在使用的范围越来越广,在使用过程中碰到问题是避免不了的,有些时候一些坑能提前避免是最好的,下面我做一个小记录,把我们生产环境中遇到的坑总结下,方便后面查询同时也方便各位 ...