繁体   English   中英

在 ASP.NET Core MVC 中创建登录页面

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM