gpt4 book ai didi

c# - 从 View 获取值到另一个 Controller

转载 作者:行者123 更新时间:2023-12-05 04:33:15 25 4
gpt4 key购买 nike

我有一个独特的 Controller ,我可以在其中控制我的所有 View ,所以从这里我遇到了问题。发送数据进行登录后,我需要获取发送的值。例如,我有这个 Controller :HomeController,在这个 Controller 中我有四个 ActionResult:

ActionResult Index

ActionResult Login

ActionResult Cuotas

ActionResult LogOff

因此,当用户登录时,我需要在此处获取用户名以验证是否已从我的数据库连接

家庭 Controller :

public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}

public ActionResult Login(string uname, string psw)
{
try
{
ViewData["uname"] = uname;
ViewData["psw"] = psw;

ConexionSQL sql = new ConexionSQL();
var usuario = sql.login(uname, psw);
var existencia = sql.usuarioOCobrador(uname, psw);

if (existencia[0].usuario == "USUARIO")
{
var caracteres = Convert.ToString(psw);
var pruebaUsuario = sql.datos(uname);


if (pruebaUsuario[0].clave == caracteres)
{
return View("Cuotas", usuario);
}
else
{
ViewBag.Contra = "Contraseña incorrecta.";
}
}
else if (existencia[0].usuario == "COBRADOR")
{
return RedirectToAction("Cuotas", "Home", usuario);
}
else
{
ViewBag.Usu = "Usuario incorrecto o usted no tiene los permisos para ingresar al sistema. Comuníquese con el área pertinente o el Departamento de Sistemas.";
}
}
catch (SqlException ex)
{
throw ex;
}
return View("Index");
}

public ActionResult LogOff(string uname)
{
ConexionSQL conexionSQL = new ConexionSQL();
conexionSQL.updateConectado(uname, false);
FormsAuthentication.SignOut();
Session.Abandon();
return RedirectToAction("Index", "Home");
}

public ActionResult Cuotas()
{
ConexionSQL sql = new ConexionSQL();
string uname = string.Empty;
string psw = string.Empty;

//Get your ViewData variables here
if (ViewData["uname"] != null)
{
uname = Convert.ToString(ViewData["uname"]);
}

if (ViewData["psw"] != null)
{
psw = Convert.ToString(ViewData["psw"]);
}
var usuario = sql.datosCob(uname);
if (usuario[0].conectado == false)
{
return RedirectToAction("Index", "Home");
}
else
{
return RedirectToAction("Cuotas", "Home");
}
}
}

索引 View ,这里是登录:

        <form class="modal-content animate" onsubmit="return control()" method="post" action="@Url.Action("Login", "Home")">
<div class="imgcontainer">
<span onclick="document.getElementById('id01').style.display='none'" class="close" title="Cerrar">&times;</span>
<img src="~/Images/00.png" alt="Logo" class="avatar"/>
</div>
<div class="container">
<label for="uname"><b>Usuario:</b></label>
<input type="text" id="uname" placeholder="Ingrese usuario..." name="uname" onkeypress="return soloLetras(event)"/>

<label for="psw"><b>Contraseña:</b></label>
<input type="password" id="psw" placeholder="Ingrese contraseña..." name="psw" onkeypress="return soloNumeros(event)"/>

<button type="submit">Iniciar sesión</button>
</div>
</form>

但是uname总是null,我的代码有什么问题吗?

enter image description here

最佳答案

如果我理解正确,你需要得到你的 uname,你首先发布到你的 Login 方法,然后你需要这个变量你的 Cuotas 提交表单时在同一请求上的方法?如果是这种情况,那么您必须使用 Session 将您的变量从一个 Controller 操作保存到另一个 Controller 操作。您的表单操作是 Login 方法而不是 Cuotas 方法,因此您的 FormCollection 将始终为空。所以在你的情况下,它看起来像:

    public ActionResult Login(string uname, string psw)
{
Response.AppendHeader("Cache-Control", "no-store");
try
{
//Set your variables here to passed to next action
Session["uname"] = uname;
Session["psw"] = psw;

ConexionSQL sql = new ConexionSQL();
var usuario = sql.login(uname, psw);
var existencia = sql.usuarioOCobrador(uname, psw);

if (existencia[0].usuario == "USUARIO")
{
var caracteres = Convert.ToString(psw);
var pruebaUsuario = sql.datos(uname);


if (pruebaUsuario[0].clave == caracteres)
{
sql.updateConectado(uname, true);
return RedirectToAction("Cuotas", "Home");
}
else
{
ViewBag.Contra = "Contraseña incorrecta.";
}
}
else if (existencia[0].usuario == "COBRADOR")
{
sql.updateConectado(uname, true);
return RedirectToAction("Cuotas", "Home");
}
else
{
ViewBag.Usu = "Usuario incorrecto o usted no tiene los permisos para ingresar al sistema. Comuníquese con el área pertinente o el Departamento de Sistemas.";
}
}
catch (SqlException ex)
{
throw ex;
}
return View("Index");
}

您可以像这样在 Cuotas 方法中获取它们:

    public ActionResult Cuotas()
{
ConexionSQL sql = new ConexionSQL();
string uname = string.Empty;
string psw = string.Empty;
//Get your ViewData variables here
if (Session["uname"] != null)
{
uname = Convert.ToString(Session["uname"]);
}

if (Session["psw"] != null)
{
psw = Convert.ToString(Session["psw"]);
}
var usuario = sql.datosCob(uname);
if (usuario[0].conectado == false)
{
return RedirectToAction("Index");
}
else
{
return View("Cuotas");
}
}

关于c# - 从 View 获取值到另一个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71471027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com