问题描述
我尝试将数据从登录视图传递到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>
,
只需将其称为方法兄弟即可。
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();
}
}