首页 > 解决方案 > 如何将数据从控制器传递到 ASP.NET MVC 中的视图

问题描述

我尝试将数据从登录视图传递到 Empinput 视图。我尝试使用 Http 会话不适用于数据传递。

我收到了这个错误:

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

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

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"); 
}

标签: c#asp.netasp.net-mvc

解决方案


将值从控制器传递到视图有不同的方法。

  1. 临时数据

在您的控制器功能中,您可以初始化一个 TempData,然后在您的视图中使用它。但它只会保存一个请求中的值。例如, TempData["UserName"] = model.UserName;

然后在视图中,您可以将值存储到变量中然后显示变量值,也可以直接显示 tempData 值。例如,

var UserName = TempData["UserName"] as string;

  1. 查看数据

ViewData 的行为和操作也像 TempData

ViewData["UserName"] = model.UserName; 然后在视图中使用它。

  1. 查看包

在控制器中,

ViewBag.UserName = model.UserName

在 View 中,您可以将其用作

@ViewBag.UserName

  1. 您可以使用简单会话

Session["UserName"] = model.UserName;

  1. 如果您的模型有更多项目需要传递给视图,您也可以使用视图模型,然后将整个模型传递给视图。

我希望这可以帮助你!一切顺利。


推荐阅读