RedirectToAction() 无法使用 ASP.NET Core 工作

问题描述 投票:0回答:1

我正在学习 ASP.NET Core 并尝试使用

RedirectToAction()
方法,但不知何故它不起作用。

这是我的代码

LoginController

[Route("[controller]")]
public class LogInController : Controller
{
    public IActionResult Index()
    {
        ViewBag.Title = "Login Page";
        return View();
    }

    [HttpPost]
    public async Task<IActionResult> LogIn(LogInViewModel model) 
    {
        if (model.UserName != "Usertest" && model.Password != "Passtest")
        {
            ModelState.AddModelError("Denied", "Invalid Username/Password");
            return View("Index", model);
        }

        return RedirectToAction(nameof(OTPInput), model);
    }

    [HttpPost]
    [Route("[action]")]
    public async Task<IActionResult> OTPInput(LogInViewModel viewModel)
    {
        return View("InputOTP");
    }

    [HttpPost]
    [Route("[action]")]
    public async Task<IActionResult> OTPValidation([FromForm] string otp) 
    {
        if (otp != "123456")
        {
            ModelState.AddModelError("Invalid OTP", "Invalid OTP");
            return View("OTPInput");
        }

        return View();
    }
}

这是我的

Index.cshtml
标记和布局:

@model LogInViewModel

<div asp-validation-summary="All">
    <form asp-action="login" asp-controller="LogIn" method="post">
        <input asp-for="UserName" placeholder="Username" />
        <input asp-for="Password" placeholder="Password" />
        <input type="submit" value="Login" />
    </form>
    <span asp-validation-for="UserName" />
    <span asp-validation-for="Password" />
</div>

当我输入正确的用户名和密码时,我会被重定向到

http://localhost:5142/LogIn/OTPInput?UserName=Usertest&Password=Passtest

我期待看到

OTPInput.View
但不知何故代码没有达到
OTPInput()
操作方法

当我使用

View("OTPInput", model)
而不是
RedirectToAction("OTPInput", "login", model)

时它就起作用了
c# asp.net-core redirecttoaction
1个回答
0
投票

将 OTPInput 方法更改为 HTTPGet 并为我工作。

public IActionResult Index()
    {
        ViewBag.Title = "Login Page";
        return View();
    }


    [HttpPost]
    [Route("[action]")]
    public async Task<IActionResult> LogIn(ThisModel model)
    {
        if (model.UserName != "Usertest" && model.Password != "Passtest")
        {
            ModelState.AddModelError("Denied", "Invalid Username/Password");
            return View("Index", model);
        }

        return RedirectToAction(nameof(OTPInput), model);
    }

    [HttpGet]
    [Route("[action]")]
    public async Task<IActionResult> OTPInput(ThisModel viewModel)
    {
        return View("Hello");
    }

    public class ThisModel
    {
        public string UserName { get; set; }
        public string Password { get; set; }

    }
© www.soinside.com 2019 - 2024. All rights reserved.