none
Pagina de Inicio RRS feed

  • Pregunta

  • saludos, estoy trabajando en una aplicación con stored procedure y entity framework, para esto he implementado una pagina de login el cual tiene unas características de color y diseño, pero el problema es que este login no aparece antes de la aplicación, sino que aparece junto con la pantalla de inicio estandar.

    he cambiado en el :

    RouteConfig.cs el código de la linea de partida a :

     public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
                );
            }

    Donde Login es el controller e Index es el ActionResult,   pero la situación persiste,   alguien me puede ayudar con este detalle????

    Gracias

    miércoles, 11 de diciembre de 2019 18:34

Respuestas

  • saludos

    lo arregle, de que manera? ,  simple, al crear la vista, hay que quitar el clic en el cuadro que dice:  usar pagina de diseño.

    esto hace que la vista sea independiente del resto del modelo

    • Marcado como respuesta Rodrigo Menares sábado, 21 de diciembre de 2019 23:50
    sábado, 21 de diciembre de 2019 23:50

Todas las respuestas

  • Buena tarde Rodrigo Menares
    Antes que nada, espero te encuentres bien
    Por lo que te entendí, cuando ejecutas tu aplicación, se abre una pantalla “de inicio estándar” (Página de Home\Index que es parte de una plantilla de MVC Net) y lo que se pretende es ver la página de inicio de sesión.

    En mi caso, utilizando la plantilla de .Net como ejemplo, configuro la clase “RouteConfig”  de la siguiente manera:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;
    
    namespace TestingLoginPageAuthentication
    {
        public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
                );
            }
        }
    }


    Considero necesario validar algunas cosas más:

    • Revisar el archivo de Web.config y buscar si está establecida una página default de inicio de sesión
    • La página que estás visualizando en vez de la de inicio de sesión, puede ser una página no protegida (se permiten usuarios anónimos), si no deseas que se visualice, hay qué implementar el nivel de seguridad en la clase
    • Verifica si existe algún re direccionamiento que no deseas, en alguna parte del código
    • Puedes establecer la ruta de tu página de inicio de sesión, para fines de depuración de código Visual Studio, en Propiedades del Proyecto=>Web=>Página Específica

    Para poder apoyarte con más, sería útil que compartieras cómo están definidos los controladores y vistas; puedes omitir el contenido del método y propiedades de la clase

    Saludos


    ING.ARGAMA

    miércoles, 11 de diciembre de 2019 23:21
  • Gracias

    revise todos los aspectos del código que me indicaste, pero la situación persiste, en el web config no hay definida ninguna pagina de inicio.

    en las propiedades trate de establecer la pagina de inicio, pero solo provoco errores.

    no hay ningún direccionamiento que no corresponda.

    no se lo que puede ser

    jueves, 12 de diciembre de 2019 0:11
  • hola

    >>pero el problema es que este login no aparece antes de la aplicación

    con que url estas ingresando ? porque alli lo que defines es un default, pero no quiere decir que si en la url pones un nombre de controller o action diferente no vaya a ingresar a esta

    Salvo que implementes los atributos de [Authorize] entonces si se redireccione al login

    ASP.Net MVC: Redirect to Login Page if User is not Authenticated (logged in)

    fijate al final como se define el web.config con el

    <authentication mode="Forms">
        <forms defaultUrl="/Home/Profile" loginUrl="/Home/Index" slidingExpiration="true" timeout="2880"></forms>
    </authentication>
    

    para que redireccione sino se esta autenticado

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 12 de diciembre de 2019 0:13
  • saludos, agregue esto :

     <system.web>
        <compilation debug="true" targetFramework="4.6" />
        <httpRuntime targetFramework="4.6" />
     
         <!--Lineas agregadas para redireccionar el inicio de la aplicacion-->
        <authentication mode="Forms">
            <forms defaultUrl="/Login/Index" loginUrl="/Login/Index" slidingExpiration="true" timeout="2880"></forms>
        </authentication>
       <!--fin de lineas agregadas-->
            
      </system.web>

    Pero no funciona

    jueves, 12 de diciembre de 2019 21:32
  • Buen día Rodrigo

    Espero te encuentres bien

    Por las configuraciones que veo has probado, opino que el problema está en el diseño de los controladores.

    La ruta que observo quieres re dirigir es “Login\Index”, lo que indica que tienes un controlador llamado “Login” y un método en él llamado “Index”, que mostrará una vista Index.cshtml; al ejecutar la aplicación, el verbo HTTP es el GET. Por lo tanto, favor de validar lo siguiente en tu archivo de clase controlador “Login.cs”:

    • Verificar que exista un sólo método Index, y que éste no realice un re direccionamiento a una página que no deseas visualizar
    • Si tienes más de un método llamado Index, verifica que estés utilizando los siguientes atributos en tus métodos: Utiliza [HttpGet] en el método Index que no haga algún re direccionamiento, sino un “return View()”, utiliza [HttpPost] para el método Index que procese los datos del usuario y que probablemente aquí tengas algún re direccionamiento a otra página

    Adicionalmente revisar:

    • Revisar si hay algún otro controlador que esté utilizando la ruta de Login definiéndolo con atributo con [RoutePrefix]
    • Revisar si algún otro método del mismo controlador (Login.cs)  u otro, que esté utilizando un atributo [Route] donde indiques una ruta que no deseas le corresponda
    • Revisar si hay algún controlador que tenga un método donde se utilicen ambos atributos  [RoutePrefix] y [Route] y que en conjunto representen una ruta que no deseas les corresponda
    • Validar que el código de la vista “Index.cshtml” tenga el contenido y comportamiento que esperas, dicha vista debe estar dentro de la carpeta “Views\Login”,

    Quedo atento a tus comentarios


    Saludos 


    ING.ARGAMA

    viernes, 13 de diciembre de 2019 17:39
  • gracias

    revise e hice todo lo indicado, pero aún persiste,  a lo mejor me estoy expresando mal.

    lo que necesito es que esta pagina de login se cargue antes de la plantilla que muestra,  hace tiempo atrás hice algo parecido y me funciono muy bien, no se que cambios le habrán hecho a la arquitectura que ya no funciona.

    saludos

    viernes, 13 de diciembre de 2019 18:26
  • Buena tarde Rodrigo

    Sí, sería necesario más detalles acerca de lo que se quiere conseguir porque por esto último que comentas sólo puedo imaginar sea algo con JavaScript, o alguna modificación en los eventos del archivo Global.asax; por otro lado sería conveniente saber si estás utilizando páginas ASPX, Razor, o Blazor.

    Si requieres más apoyo, sin problema proporciona más detalle

    Saludo


    ING.ARGAMA

    viernes, 13 de diciembre de 2019 23:59
  • saludos

    no he tocado global.asax

    estoy usando razor , pues  la aplicación en mvc 5, con entity framework y procedimientos almacenados la cual responde excelente, pues se conecta a los stored procedure y trae resultados de la consulta, pero lo que no he podido replicar es el hecho que necesito que la pagina de inicio no sea la :  

    Layout = "~/Views/Shared/_Layout.cshtml";

    , incluso trate de cambiarla, pero me envía errores.

    saludos

    sábado, 14 de diciembre de 2019 1:00
  • Buen día Rodrigo

    Antes que nada, espero te encuentres bien

    Con base a lo que comentas, menciono algunos puntos:

    • El uso de ‘Layout = "~/Views/Shared/_Layout.cshtml";’ es para aplicar una plantilla a una vista que tú deseas
    • En el archivo “_Layout.cshtml” puedes incluir el código que tendrá tu plantilla, ya sea HTML, CSS, JAVA Script, es típicamente para aplicar diseño a tus páginas sin tener que repetir el mismo en cada página a la que deseas
    • Existe una forma para que la inclusión de tu Layout a cada una de tus páginas no tenga que ser una tarea repetitiva, por lo que puedes hacer uso del archivo “_ViewStart.cshtml

    Básicamente, si tienes un proyecto MVC Razor que tenga el archivo “_ViewStart.cshtml”, el código contenido en éste se ejecutará de forma automática, antes del código de cualquiera de tus vistas(pero no antes del código de tu controlador). No se configura en algún lado, simplemente el renderizado ya lo hace por defecto si encuentra el archivo. Por lo que, si no deseas que el código contenido en “_ViewStart.cshtml” se ejecute, puedes borrarlo, comentarlo, ajustarlo para que no te marque errores. Puede haber más de un archivo “_ViewStart.cshtml”.

    Ubicación de archivo _ViewStart.cshtml

    Para más detalles acerca del funcionamiento de “_ViewStart.cshtml” te comparto un Link. En él se puede leer el efecto que tiene al utilizar más de un archivo “_ViewStart.cshtml” con diferente ubicación jerárquica:

    Acerca de _ViewStart.cshtml

    Quedo atento a tus comentarios


    ING.ARGAMA


    • Editado ING.ARGAMA lunes, 16 de diciembre de 2019 18:35 Se agrega texto en paréntesis
    lunes, 16 de diciembre de 2019 18:29
  • Gracias.

    saludos ,  "Funciona" ,  y lo pongo entre comillas, por que logre que mostrara primero la pagina indicada, pero después que el user y passwrod funciona, no me muestra la pagina estandard, que es a la que quisiera llegar , te dejo el controller Login

      public ActionResult Index()
            {
                return View();
            }

            [AllowAnonymous]
            [HttpPost]
            public ActionResult Index(Login login)
            {
                EmpleadosEntities pass = new EmpleadosEntities();

                var Existe = pass.SP_Autoriza(login.User_Id, login.PassWord).FirstOrDefault();

                if (Existe != null)
                {
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    var resultado = "Usuario No Existe";
                    return Json(resultado, JsonRequestBehavior.AllowGet);
                }
            }

    que como veras no tiene ninguna ciencia aparte.

    saludos

    miércoles, 18 de diciembre de 2019 3:10
  • saludos

    lo arregle, de que manera? ,  simple, al crear la vista, hay que quitar el clic en el cuadro que dice:  usar pagina de diseño.

    esto hace que la vista sea independiente del resto del modelo

    • Marcado como respuesta Rodrigo Menares sábado, 21 de diciembre de 2019 23:50
    sábado, 21 de diciembre de 2019 23:50