在ASP.NET MVC中实现登录后回到原先的界面
2023-09-11 14:16:51 时间
有这样的一个需求:提交表单,如果用户没有登录,就跳转到登录页,登录后,跳转到原先表单提交这个页面,而且需要保持提交表单界面的数据。
提交表单的页面是一个强类型视图页,如果不考虑需要保持提交表单界面的数据,可以先设计这样的一个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 CORE MVC 部署Windows 系统上 IIS具体步骤---.Net Core 部署到 IIS位系统中的步骤
- ASP.NET MVC中使用FluentValidation验证实体
- 充分发挥异步在 ASP.NET 中的强大优势
- 【AaronYang第一讲】ASP.NET MVC企业开发的基本环境[资源服务器概念]
- ASP.NET使用Model在MVC中进行自定义类的列表数据传递Demo
- ASP.NET使用ViewBag和HttpPost在MVC中进行基本数据类型的数据传递Demo
- Asp.Net Web API 2第十四课——Content Negotiation(内容协商)
- ASP.NET MVC3 301永久重定向实现程序
- asp.net core 读取Appsettings.json 配置文件
- ASP.Net MVC Action重定向跳出Controller和Area
- ASP.NET MVC 基于角色的权限控制系统的示例教程
- ASP.NET MVC 从IHttp到页面输出
- ASP.NET MVC - The view must derive from WebViewPage, or WebViewPage<TModel>
- 17+个ASP.NET MVC扩展点,含源码{转}
- [ASP.NET Core 3框架揭秘] 配置[6]:多样化的配置源[上篇]
- 《ASP.NET MVC 5框架揭秘》样章发布
- 新作《ASP.NET MVC 5框架揭秘》正式出版
- ASP.NET Razor - 标记
- ASP.NET Web Forms - XML 文件
- ASP.NET MVC - 模型
- ASP.NET MVC - 视图
- ASP.NET MVC (三、表单与文件上传)
- ASP.NET Core微服务(六)——【.Net Core操作redis】StackExchange.Redis
- 【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对照(颠覆性理论)
- [转]剖析ASP.Net MVC Application
- ASP.NET Core 3.0 使用gRPC