如何从控制器传递数据以在ASP.NET MVC中查看

问题描述

我尝试将数据从登录视图传递到Empinput视图。我尝试使用Http会话无法进行数据传递。

我收到此错误

“ HttpSessionStateBase'不包含'SetString'的定义,并且找不到可访问的扩展方法'SetString',它接受类型为'HttpSessionStateBase'的第一个参数。”

我在下面放置了代码,请告诉我如何传递数据?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DemoEmployee.Models;
using System.Web.Security;
using System.Web.UI.WebControls;
using Microsoft.AspNetCore.Http;

public ActionResult Login(Models.Member model)
{
    var userr = db.User.Where(x => x.UserName == model.UserName && x.Password == model.Password).FirstOrDefault();
            
    name = model.UserName;

    if (userr == null)
    {
        ModelState.AddModelError("","Invalid username and password");
        FormsAuthentication.SetAuthCookie(model.UserName,false); 
    }
    else
    {
        // This is not working for passing data to another view
        HttpContext.Session.SetString("Username",model.UserName.ToString());
        return RedirectToAction("Empinput","Empinput");    
    }

    return View();
}

[HttpPost]
public ActionResult Empinput(Employee model)
{
        Member member = new Member();
        Login sdm = new Login();

        // this is not working for passing data from Login view
        String name = HttpContext.Session.GetString("Username"); 
}

解决方法

这很容易。您可以通过ViewBag传递数据以进行查看。

在您的控制器中:

ViewBag.[write a name for View Bag]  = [Your Value]

这就像一个变量,但它是动态的。

在您的示例视图中:

<td>@ViewBag.[Viewbag name]</td>
,

只需将其称为方法兄弟即可。

enter image description here

https://github.com/EmpeRoar/StackOverFlowSolutions/blob/main/SO-Solutions/SO.Mvc31/Controllers/EmployeeController.cs

public class Employee
{
    public int ID { get; set; }
    public string Name { get; set; }
}
public class EmployeeController : Controller
{
    public EmployeeController()
    {

    }

    public async Task<IActionResult>  Login()
    {
        var emp = new Employee()
        {
            ID = 1,Name = "Vladimir Bacosa"
        };
        await EmpInput(emp);
        return View();
    }

    [HttpPost]
    public async Task<IActionResult> EmpInput(Employee emp)
    {
        Console.WriteLine(emp.Name);
        return View();
    }
}