ASP.NET MVC实现登录后跳转到原界面

 更新时间:2022年09月11日 12:33:50   作者:Darren Ji  
这篇文章介绍了ASP.NET MVC实现登录后跳转到原界面的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

有这样的一个需求:提交表单,如果用户没有登录,就跳转到登录页,登录后,跳转到原先表单提交这个页面,而且需要保持提交表单界面的数据。

提交表单的页面是一个强类型视图页,如果不考虑需要保持提交表单界面的数据,可以先设计这样的一个Model:

public class Student
{
    public string Name{get;set;}
    public string ReturnUrl{get;set;}
}

在提交表单的视图页,大致这么写:

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    @Html.Hidden("ReturnUrl", Request.Url.PathAndQuery)
    @Html.TextBoxFor(m => m.Name)
    <input type="submit" value="提交"/>
}

在控制器中大致这么写:

public ActionResult Index()
{
    return View(new Student());
}
[HttpPost]
public ActionResult Index(Student student)
{
    return Redirect(student.ReturnUrl);
}

可是,虽然回到了表单提交的强类型视图页,表单数据却没有得以保持。

于是,想到了使用如下方式:

return View("someview", somemodel);

someview的名称如何获取呢?

public ActionResult Index()
{
    return View(new Student());
}

以上,如果我们获取到action的名称就相当于获取到视图的名称!

重新设计Model:

    public class Student
    {
        public string Name { get; set; }
        public string ControllerName { get; set; }
        public string ActionName { get; set; }
    }

可以先从路由中把action名称拿到,然后赋值给Student的ActionName属性。

    public class HomeController : Controller
    {
        
        public ActionResult Index()
        {
            Student student = new Student()
            {
                ActionName = this.ControllerContext.RouteData.Values["action"].ToString(),
                ControllerName = this.ControllerContext.RouteData.Values["controller"].ToString()
            };
            return View(student);
        }
        [HttpPost]
        public ActionResult Index(Student student)
        {
            ViewBag.msg = "我又回来了~~";
            //如果是登录,先验证,验证成功执行下面的代码
            return View(student.ActionName, student);
        }
    }

以上,student.ActionName值既是action名称也是view名称。

在提交表单的强类型视图页:

@model MvcApplication1.Models.Student
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
<div>@ViewBag.msg</div>
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(m => m.Name)
    <input type="submit" value="提交"/>
}

所以,面对本篇开始描述的需求,仅仅跳转是不够的,需要向某个视图传递Model,而其中的关键是:
1、从路由中获取action名称
2、action名称和view名称一致 

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • ASP.NET(C#)中操作SQLite数据库实例

    ASP.NET(C#)中操作SQLite数据库实例

    最近项目中有使用到SQLite数据库,于是查找资料,编写了一个ASP.NET基于C#语言的SQLite数据库操作实例.大家看代码就可以看懂了,和以往使用ADO.NET操作SQL数据库类似.
    2009-12-12
  • ASP.NET实现多域名多网站共享Session值的方法

    ASP.NET实现多域名多网站共享Session值的方法

    实现功能:可设置哪些站点可以共享Session值,这样就防止别人利用这个去访问,要想实现这个功能就必须得把Session值 放入数据库中, 所有我们先在VS命令工具下注册一个
    2011-11-11
  • asp.net System.Guid ToString五种格式

    asp.net System.Guid ToString五种格式

    这篇文章主要介绍了asp.net System.Guid ToString五种格式,需要的朋友可以参考下
    2017-02-02
  • Asp.Net Oracle数据的通用操作类

    Asp.Net Oracle数据的通用操作类

    Asp.Net连接Oracle数据的通用操作类并且利用它对数据库查询、汇总、更新等操作演示
    2009-12-12
  • asp.net实现文件下载的代码

    asp.net实现文件下载的代码

    asp.net中也需要实现文件的下载,因此下面的方法可以参考下除了第四种不推荐以外,其他的都可以,但是个人感觉分块下载的要好一点。没有仔细测试,所以可能有问题。
    2011-02-02
  • 教你如何使用VS远程调试

    教你如何使用VS远程调试

    这篇文章主要介绍了教你如何使用VS远程调试的相关资料,需要的朋友可以参考下
    2015-07-07
  • asp.net中调用存储过程的方法

    asp.net中调用存储过程的方法

    这篇文章主要介绍了asp.net中调用存储过程的方法,结合实例形式分析了存储过程的建立与asp.net调用存储过程的相关技巧,需要的朋友可以参考下
    2016-05-05
  • .NET基础之自定义泛型分析

    .NET基础之自定义泛型分析

    这篇文章主要介绍了.NET基础之自定义泛型,实例分析了定义泛型类、default关键字、约束类型等的用法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • WPF常用控件用法及介绍

    WPF常用控件用法及介绍

    本文详细讲解了WPF常用控件用法及介绍,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • Linkbutton控件在项目中的简单应用

    Linkbutton控件在项目中的简单应用

    Button控件可分为button控件、LinkButton控件、ImageButton控件三类,而LinkButton控件则在页面上显示为一个超级链接,下面与大家分享下其具体应用
    2013-05-05

最新评论