Stack Overflow en español Asked on November 27, 2021
Tengo este problema:
System.NullReferenceException: 'Referencia a objeto no establecida como instancia de un objeto.'
Vista:
@model IEnumerable<ProvidusHomeWeb.Models.Usuarios>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<meta charset="utf-8">
<title>Providus</title>
</head>
<body>
@foreach (var item in Model)
{
@Html.DisplayFor(modelitem=> item.usuario)
}
</body>
</html>
Controlador:
public ActionResult Login(string uname, string psw)
{
try
{
ConexionSQL sql = new ConexionSQL();
var caracteres = Convert.ToString(psw);
var usuario = sql.login(uname, psw);
if (usuario.Count <= 0)
{
ViewBag.MensajeUsuario = "El usuario es inexistente.";
}
else if (usuario[0].nivel == 0
|| usuario[0].nivel == 1
|| usuario[0].nivel == 2
|| usuario[0].nivel == 7)
{
return View("Login1");
}
else if (usuario[0].nivel == 3
|| usuario[0].nivel == 4
|| usuario[0].nivel == 16)
{
return View("Login2");
}
else
{
return View("Index");
}
}
catch (SqlException ex)
{
throw ex;
}
return View("");
}
}
Clase:
public class Usuarios
{
public string usuario { get; set; }
public decimal? nivel { get; set; }
public Usuarios(string usuario, decimal? nivel)
{
this.usuario = usuario;
this.nivel = nivel;
}
}
ConexionSQL:
public List<Usuarios> login(string usu, string cla)
{
List<Usuarios> salida = new List<Usuarios>();
string con = "cadena";
using (SqlConnection connection = new SqlConnection(con))
{
connection.Open();
string sql = "SELECT Count(*), nivel " +
"FROM usuarios " +
"WHERE usuario = @usu " +
"AND clave = @cla " +
"AND AccesoSistemaProvidus = 1";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.Parameters.AddWithValue("@usu", usu);
cmd.Parameters.AddWithValue("@cla", cla);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
string usuario = dr["usuario"]?.ToString();
string clave = dr["clave"]?.ToString();
decimal? nivel = Convert.ToDecimal(dr["nivel"]?.ToString());
Usuarios u = new Usuarios(usuario, clave, nivel);
salida.Add(u);
}
connection.Close();
return salida;
}
}
Entiendo que el problema es que no le estoy pasando el modelo al controlador pero, ¿Cómo lo soluciono?
Puedes utilizar View("ViewName", model)
en controler
donde defines el nombre de la vista
, con su respectivo modelo
dependiendo si la vista
no pertenece a la accion
actual del controlador. las vistas deberan pertenecer a las acciones del controlador
Ejemplo:
if (usuario[0].nivel == 0
|| usuario[0].nivel == 1
|| usuario[0].nivel == 2
|| usuario[0].nivel == 7)
{
return View(usuario);//suponiendo que esta es la vista de la accion actual
}
else if (usuario[0].nivel == 3
|| usuario[0].nivel == 4
|| usuario[0].nivel == 16)
{
return View("Login2",usuario);
}
else
{
return View("Index",usuario);
}
En caso de que las vista pertenescan a un controlador distinto puedes utilizar.
return RedirectToAction("nombreAccion", "nombreController", modelo)
si requieres solo el acceso detalle del modelo usuario y no a una coleccion de usuarios aplica en la accion:
return View(usuario[0])
y en la vista @model ProvidusHomeWeb.Models.Usuarios
Answered by jcHernande2 on November 27, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP