[英]Creating a Login Page in ASP.NET Core MVC
我正在尝试创建一个登录页面。 但它说没有找到页面。
我已将其包含在Startup.cs
:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{Controller=LoginController}/{action=Login}");
});
该Login.cshtml
页面是意见Views/Login/Login.cshtml
的控制器下和控制器所在的名称文件夹LoginController.cs
的代码LoginController.cs
:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace AdminControl.Controllers
{
public class LoginController : Controller
{
// POST: LoginController
[HttpPost]
public IActionResult Login()
{
return View();
}
}
}
Login.cshtml
:
<form asp-action="Users/Index" class="form-group" id="login-form" method="post" runat="server" style="text-align: center;">
<input class="form-control" placeholder="ID" runat="server" style="text-align: center;"/>
<input class="form-control" placeholder="Password" runat="server" style="text-align: center;" type="password"/>
</form>
<button class="btn btn-info" form="login-form" value="Submit" type="submit">Submit</button>
出了什么问题?
修复模式中的错误:“{Controller=LoginController}/{action=Login}”);
pattern: "{Controller=Login}/{action=Login}");
但最好使用标准的默认模式
pattern: "{controller=Home}/{action=Index}/{id?}");
并在检查用户是否尚未登录后从索引操作重定向到登录控制器
正如@IsmailDiari 所注意到的,您应该有两个操作 - 一个用于获取登录表单,另一个用于发布登录表单。 但你还需要一个模型:
public class LoginViewModel
{
public string Login {get; set;}
public string Password {get; set;}
}
在此更改控制器和视图后,如下所示:
[HttpGet]
public IActionResult Login()
{
var viewModel=new LoginViewModel;
return View(viewModel);
}
// POST: When submitting the login credentials
[HttpPost]
public IActionResult Login(LoginViewModel viewModel)
{
}
登录表格:
@model LoginViewModel
@using (Html.BeginForm())
{
<input class="form-control" asp-for = "Login" name="login" placeholder="Login" runat="server" style
="text-align: center;"/>
<input class="form-control" asp-for="Password" name="password" placeholder="Password" runat="server" style="text-align: center;" type="password"/>
<input type="submit" value="Login" class="btn btn-primary" />
}
请参阅此链接以了解如何设置默认路由,您做错了。 您还需要提供Get操作以返回视图。 您的控制器应如下所示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace AdminControl.Controllers
{
public class LoginController : Controller
{
// Get: Return Login View
[HttpGet]
public IActionResult Login()
{
return View();
}
// POST: When submitting the login credentials
[HttpPost]
public IActionResult Login(FormCollection collection)
{
//1. validation Goes here
//2. redirection after validation,
//return View();
}
}
}
你的 cshtml 正文应该是这样的
<body>
@using (Html.BeginForm())
{
<input class="form-control" name="id" placeholder="ID" runat="server" style
="text-align: center;"/>
<input class="form-control" name="password" placeholder="Password" runat="server" style="text-align: center;" type="password"/>
<input type="submit" value="Login" class="btn btn-primary" />
}
</body>
您应该将name属性设置为您的输入,以便您稍后可以在 FormCollection 中找到它们
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.