如何从ASP.NET Core中的视图重定向到另一个视图

问题描述

我已经在ASP.NET Core MVC中为登录视图编写了以下代码

@using Microsoft.AspNetCore.Http
@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor

@{
    ViewData["Title"] = "Login";
    Layout = null;

}
<head>
</head>
<body>
    @if (!string.IsNullOrEmpty(HttpContextAccessor.HttpContext.Session.GetString("User")))
    {
        //redirect to home page
    }
    <div class="main">
        <p class="sign" align="center">Sign in</p>
        <form class="form1" asp-action="Login" asp-controller="User" method="post" enctype="multipart/form-data">
            <input class="un" type="text" align="center" placeholder="Username" name="username" id="username">
            <input class="pass" type="password" align="center" placeholder="Password" name="Password" id="password">
            <input type="submit" class="submit" align="center" value="Sign in" id="signIn">
        </form>
    </div>
    <br />
</body>

如果Session包含键User的数据

我该如何实现?

解决方法

除了JavaScript之外,别无选择。这是因为视图正在渲染当前请求的步骤,所以您无法返回重定向操作。同样,对于MVC概念来说,这也不是很好的逻辑。

使用javascript:

@if (!string.IsNullOrEmpty(HttpContextAccessor.HttpContext.Session.GetString("User")))
{
    //redirect to home page
    <script type="text/javascript">
    window.location.href = "@Url.Action("Index","HomeController")";
    </script>
}

但是我建议您在登录控制器中实现它。返回操作结果之前,请检查会话中是否存在用户,然后根据需要重定向。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...