C# ViewBag未向视图发送任何值

C# ViewBag未向视图发送任何值,c#,asp.net-core,model-view-controller,C#,Asp.net Core,Model View Controller,在ASP.NET Core MVC中,我在创建登录面板时遇到问题,我在用户登录帐户后使用会话,并且我在ViewBag中存储会话值。但是ViewBag内部没有任何值,而是获取null值 这是控制器 [HttpPost] public IActionResult Login(userModel model) { var findValue = _context.users.Any(o => o.username == model.user

在ASP.NET Core MVC中,我在创建登录面板时遇到问题,我在用户登录帐户后使用会话,并且我在ViewBag中存储会话值。但是ViewBag内部没有任何值,而是获取null值

这是控制器

[HttpPost]
        public IActionResult Login(userModel model)
        {
            var findValue = _context.users.Any(o => o.username == model.username);
            var findValue2 = _context.users.Any(o => o.password == model.password);
            if (findValue && findValue2)
            {
                HttpContext.Session.SetString("Username", model.username);
            }
            return View(model);
        }

public IActionResult Index()
        {
            ViewBag.Username = HttpContext.Session.GetString("Username");
            return View();
        }
这里是风景 Index.cshtml

@model ComplaintManagement.Models.userModel
@{
    ViewData["Title"] = "Portal";
}

<h1>Welcome @ViewBag.Username</h1>
@model ComplaintManagement.Models.userModel
@{
ViewData[“标题”]=“门户”;
}
欢迎@ViewBag.Username
Login.cshtml

@model ComplaintManagement.Models.userModel
@{
    ViewData["Title"] = "Login";
}
<div class="row mb-3">
    <div class="col-lg-4"></div>

    <div class="col-lg-4 border login" style="background-color: #d3d1d1;">
        <h4 class="mt-3 text-center">
            <i class="fa fa-lg fa-user text-secondary"></i><br />
            Login
        </h4>
        <hr />
        <form method="post" asp-action="Index" asp-controller="Portal">
            <div class="text-danger"></div>
            <div class="text-warning">@ViewBag.Name</div>
            <div class="form-group">
                <label class="mt-4 asp-for=" username"">Username</label>
                <input class="form-control" type="text" required="required" asp-for="username" />
                <span></span>
            </div>

            <div class="form-group">
                <label class="mt-4" asp-for="password">Password</label>
                <input type="password" class="form-control" required="required" asp-for="password" />
                <span></span>
            </div>

            <center>Don't have an account? <a asp-controller="Portal" asp-action="Register">Register here</a>.</center>
            <center><button value="login" class="btn btn-primary mt-3 w-25 mb-3 align-content-center">Login</button></center>
        </form>
    </div>
    <div class="col-lg-4"></div>
</div>
@model ComplaintManagement.Models.userModel
@{
ViewData[“标题”]=“登录”;
}

登录
@查看包。名称 用户名 密码 你没有账户吗?在这里注册。 登录
ASP.NET核心中的会话和状态管理


下面是一个演示如何在ASP.NET内核中使用会话

1。启动配置代码

@using Microsoft.AspNetCore.Http;

<h3>Success Page</h3>
Welcome @Context.Session.GetString("username")
<br>
<a asp-controller="account" asp-action="logout">Logout</a>
AddSession
在ConfigureServices中,在Configure中使用session

 public class Startup
 {

    public void ConfigureServices(IServiceCollection services)
     {
        ...
        services.AddSession();
        ...
     }
     
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseSession();

        app.UseStaticFiles();

        ....
    }
2。控制器代码

public class AccountController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    [HttpGet]
    public IActionResult Login()
    {
        return View();
    }

    [HttpPost]
    public IActionResult Login(userModel model)
    {    
        if (string.IsNullOrEmpty(model.username
            ) || string.IsNullOrEmpty(model.password))
        {
            return NotFound();
        }

       //var user = await _context.users.FirstOrDefaultAsync(x => x.username == model.username && x.password == model.password);

        //if (user != null)
        if (model.username.Equals("test") && model.password.Equals("123"))
        {
            HttpContext.Session.SetString("username", model.username);
        }
        else
            ViewBag.error = "Invalid Account";
         
        return View("Index");
    }

    [HttpGet]
    public IActionResult Logout()
    {
        HttpContext.Session.Remove("username");
        return RedirectToAction("Index");
    }
}
3。查看代码

   <h3>Login Page</h3>
    @ViewBag.error
    <form method="post" asp-controller="account" asp-action="login">
        <table border="0" cellpadding="2" cellspacing="2">
            <tr>
                <td>Username</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td><input type="submit" value="Login"></td>
            </tr>
        </table>
    </form>
登录页面
@ViewBag.error
用户名
密码
4。成功时返回视图的代码

@using Microsoft.AspNetCore.Http;

<h3>Success Page</h3>
Welcome @Context.Session.GetString("username")
<br>
<a asp-controller="account" asp-action="logout">Logout</a>
@使用Microsoft.AspNetCore.Http;
成功页面
欢迎@Context.Session.GetString(“用户名”)


var findValue=\u context.users.Any(o=>o.username==model.username);var findValue2=_context.users.Any(o=>o.password==model.password)看起来无法正常工作。第一个查询将查找具有给定用户名的任何用户。第二个将查找具有给定密码的任何用户。不能保证两个查询都会找到同一个用户。你需要重新思考逻辑。(同样,以纯文本形式存储密码也是一个很大的安全错误)。但是……你为什么还要尝试构建自己的登录系统呢?ASP.NET附带了其标识功能,它将立即向应用程序添加现成的安全登录功能。它已经解决了在尝试构建登录系统时可能出现的所有错误和安全问题(如我提到的),包括许多您可能还没有想到的问题,并且具有需要花费您很长时间才能创建的功能。如果需要,它也可以定制。几乎没有理由不使用它。请参阅这里的介绍和教程:您可以共享Startup.cs文件吗?或者您可以参考此主题:。因为我有一个预感,你没有配置使用Session@FahadAzeem,您的
Viewbag
代码是正确的,我更新了有关如何使用会话进行登录操作的代码。你可以试试。