我正在学习 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)
时它就起作用了
将 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; }
}