none
duda con @RenderSection RRS feed

  • Pregunta

  • hola  un saludo a la comunidad.

    estoy en asp mvc y necesito mostrar el nombre del usuario en cada pagina del sitio, esta es la platilla o layout

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8" />
            <title>@ViewBag.Title</title>
            <meta name="viewport" content="width=device-width, initial-scale=1" />
            <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
            @Styles.Render("~/Content/css")
            @Scripts.Render("~/bundles/modernizr")
        </head>
        <body>
            <nav role="navigation" class="navbar navbar-inverse navbar-fixed-top">
                <!-- Brand and toggle get grouped for better mobile display -->
                <div class="navbar-header">
                    <button type="button" data-target="#navbarCollapse" data-toggle="collapse" class="navbar-toggle">
                        <span class="sr-only">Toggle navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>                
                    <a href="#" class="navbar-brand">my-estylo.com</a>
                    <label class ="navbar-brand"><strong>User: @RenderSection("User",required:false)</strong></label>
                </div>
                <!-- Collection of nav links, forms, and other content for toggling -->
                <div id="navbarCollapse" class="collapse navbar-collapse">
                    <ul class="nav navbar-nav">
                        <li class="active"><a href="#">Home</a></li>
                        <li><a href="#">Profile</a></li>
                        <li class="dropdown">
                            <a data-toggle="dropdown" class="dropdown-toggle" href="#">Messages <b class="caret"></b></a>
                            <ul role="menu" class="dropdown-menu">
                                <li><a href="#">Inbox</a></li>
                                <li><a href="#">Drafts</a></li>
                                <li><a href="#">Sent Items</a></li>
                                <li class="divider"></li>
                                <li><a href="#">Trash</a></li>
                            </ul>
                        </li>
                    </ul>
                    <form role="search" class="navbar-form navbar-left">
                        <div class="form-group">
                            <input type="text" placeholder="Search" class="form-control">
                        </div>
                    </form>
                    <ul class="nav navbar-nav navbar-right">
                        <li><a href="#">Login</a></li>
                    </ul>
                </div>
            </nav>
            <div class="container-fluid">
                <div class="row">
                    <div class="col-md-2"></div>
                    <div class="col-md-8">@RenderBody()</div>
                    <div class="col-md-2"></div>
                </div>

            </div>
            @Scripts.Render("~/bundles/jquery")
            @Scripts.Render("~/bundles/jqueryval")
            @Scripts.Render("~/bundles/bootstrap")


            @*<div data-role="page" data-theme="b">
                <div data-role="header">
                    @if (IsSectionDefined("Header")) {
                        @RenderSection("Header")
                    } else {
                        <h1>@ViewBag.Title</h1>
                        @Html.Partial("_LoginPartial")
                    }
                </div>
                <div data-role="content">
                    @RenderBody()
                </div>
            </div>

            @Scripts.Render("~/bundles/jquery")
            <script>
                $(document).on("mobileinit", function () {
                    $.mobile.ajaxEnabled = false;
                });
            </script>
            @Scripts.Render("~/bundles/jquerymobile")*@
            @RenderSection("scripts", required: false)
        </body>
    </html>

    en la parte remarcada de arriba es en donde se mostrara el nombre del usuario.

    la duda es si en cada vista tengo que poner lo siguiente:

    @section User{
          @nombreUsuario
    }

    de antemano gracias...


    LOWELLPELIKNO

    martes, 31 de marzo de 2015 4:34

Todas las respuestas

  • Hola,

    La sobrecarga del método @RenderSection que utilizas especifica que la sección no es requerida, por tanto, podrías no incluir la sección en las vistas que hagan uso del layout. Al no incluir, queda claro que no mostrarás el nombre de usuario.

    Ahora, sí el único propósito es mostrar el nombre del usuario, no basta con (sólo si usas MemberShip):

    <label class ="navbar-brand"><strong>Bienvenido @User.Identity.Name</strong>


    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ

    martes, 31 de marzo de 2015 4:47
  • No veo la necesidad de un RenderSection() solamente para eso.  Me parece que se complica.  Si el usuario es directamente accesible, lo que muestra Williams es suficiente.

    Si es un objeto especial o personalizado suyo, tiene la opción de pasarlo al ViewBag en todas las acciones que devuelven una vista que usan dicho layout.  Para no tener que escribir el mismo código todo el tiempo, puede crear una clase Controller base que lo haga por usted.

    using System;
    ...
    
    namespace Proyecto.Controllers
    {
        public class Controller : System.Web.Mvc.Controller
        {
            protected override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                ViewBag.Usuario = ....;
            }
        }
    }

    Y en vez del RenderSection usa algo así:

    <strong>User: @ViewBag.Usuario</strong>



    Jose R. MCP
    Code Samples


    • Editado webJose martes, 31 de marzo de 2015 14:01
    martes, 31 de marzo de 2015 13:59
  • hola

    una duda, el dato del nombre del usuario de donde lo obtiene ? porque entiendo que si este lo envias desde cada action porque el layout lo requiere entonces deberias enviarlo siempre y esto no se si es muy bueno

    lo que aconsejaria es que esa info la obtengas de algun otro lado que sea global al sitio, asi no la tienes que enviar en cada accion

    Williams comenta el User.Identity, pero no se si estas usando esto en la autenticacion de tu sitio

    si veo que usas jquery, podrias en el codigo del layout invocar mediante ajax un action que devuelva esa info para mostrarla dond elo necesitas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 31 de marzo de 2015 14:29
  • hola gracias por sus respuestas.

    NO UTILIZO eso de User.Identity.

    lo que estoy haciendo es una especie de login.

    en cada action tengo una validación si hay una session activa tomo el nombre del usuario y lo muestro en la pagina.

    pero en la parte donde se muestra es la parte que se comparte para todas las paginas del sitio, y si no uso un RenderSection() en el layout y lo cargo en cada vista no se muestra ese dato, es por eso que lo hice a si.

    otra cosa no estoy utilizando jquery para hacer las consultas por ajax, aunque aparezcan que los agrego al layout no utilizo jquery.

    no se si me explique...


    LOWELLPELIKNO

    miércoles, 1 de abril de 2015 20:41
  • hola

    >>en cada action tengo una validación si hay una session activa tomo el nombre del usuario y lo muestro en la pagina.

    implementar seguridad usando Session no es buena idea

    mas alla que uses o no asp.net membership la seguridad de asp.net si deberias implementarla

    si deberias usar el

    FormsAuthentication.SetAuthCookie()

    para crear el ticket que permite al sitio saber si esta autenticado o no

    Forms Authentication in ASP.NET MVC

    con esto asignarias el User.Identity

    usar Session para la autenticacion no esta recomendado

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 1 de abril de 2015 21:05
  • hola leandro gracias por tu respuesta,

    me cree un ejemplo con esto de la seguridad por formularios.

    siguiendo este ejemplo que me encontré investigando un poco ejemplo

    ahora la pregunta es, a cada action de mis controladores les tengo que poner esto 

       [RequiredAuthentication(Check = true)]

    osea a cada action que yo crea que lo amerite

    ????

    de antemano gracias...


    LOWELLPELIKNO

    viernes, 10 de abril de 2015 18:23