none
Redireccionar mi retorno de una acción desde el cotrolador a la vista MVC RRS feed

  • Pregunta

  • Hola muchacho me surgió un problema nuevo que me tiene salido de mis cabales.... 

    Necesito que mi controlador me direccione a mi vista "Home" cuando guardo datos en mi base de datos, Esto lo estoy haciendo en todos mis controladores y me funciona, pero cuando asigno un rol, ingresa al Get bien, pero cuando entra al POST me envia  los datos correctamente a la base de datos pero la vista me la asigna por defecto y no"Home" a la cual quiero, esto lo estoy haciendo con un   

    return RedirectToAction y  el resto me funciona o.k.. pero aqui NO.    lo raro es que un objeto si me lo acepta, en este caso confirm si lo acepta... lo unico que muestra después de asignar los permisos es pantalla negra con el aviso de "operacion exitosa" pero con la pantalla negra:

    confirm= Vista = operacion exitosa

    Home = Vista= pagina que quiero no me la muestra.

    !las vistas confrim y home ya estan creadas!

    Este es el error en la url se puede ver que son las mismas de la de abajo

    falla, por fuara de la vista.. arroja esta vista por defecto

    controlador Account.. y dentro de el lleva mi vistas de usuarios, permisos

         public ActionResult permisos()
            {

                var empleado = from p in bd.UserProfile
                               select new
                               {
                                   Id = p.UserName,
                                   Name = p.UserName + " - " + p.CodigoPersona
                               };

                string[] listroles =Roles.GetAllRoles();
                SelectList list = new SelectList(listroles);
                ViewBag.listrol=list;
                ViewBag.user = new SelectList(empleado, "Id", "Name");
                return View();
            }

            /// <summary>
            /// 
            /// </summary>
            /// <param name="autorizacion"></param>
            /// <returns></returns>

            [HttpPost]
            public ActionResult permisos( FormCollection autorizacion)
            {
                var perfil = autorizacion["listrol"];
                var user = autorizacion["user"];
                Roles.AddUserToRole(user, perfil);
                return RedirectToAction("confirm","Home");
            }
    
    vista permisos
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)
    
        <fieldset>
            <legend>Asignar Perfil</legend>
            <div class="separador">
                <div class="flota">
                    <div class="editor-label">
                        @Html.Label("Perfil")
                    </div>
                    <div class="editor-field">
                        @Html.DropDownList("listrol", ViewBag.deptList as SelectList)
                    </div>
                </div>
                <div class="flota">
                    <div class="editor-label">
                        @Html.Label("Usuario")
                    </div>
                    <div class="editor-field">
                        @Html.DropDownList("user", null, new { @class = "dropdown" })
                    </div>
                </div>
            </div>
            <div class="opciones">
                <input type="submit" value="Asignar" />
            </div>
        </fieldset>
    }
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/jqueryui")

    y asi tiene que direccionar


    erikpugo


    • Editado Erik Puentes jueves, 19 de febrero de 2015 16:36 arreglo
    jueves, 19 de febrero de 2015 16:33

Todas las respuestas

  • hola

    pero si redireccionas a un action cuya view que tiene solo un texto, eso es lo que va a mostrar en el browser

    si quieres mostrar la misma pantalla peor con una confirmacion podrias usar el

    [HttpPost]         public ActionResult permisos( FormCollection autorizacion)         {             var perfil = autorizacion["listrol"];             var user = autorizacion["user"];             Roles.AddUserToRole(user, perfil);

    ViewBag.Confirmacion = "operacion exitosa";             return View();         }

    y usas el ViewBag para mostrar el mensaje en la misma view de permisos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 19 de febrero de 2015 18:06
  • Hola lenadro, logre poner mi mensaje donde queria en mi vista con

    @using (Ajax.BeginForm("permisos","Account", new AjaxOptions
    {
        UpdateTargetId = "usercontent",
        InsertionMode = InsertionMode.Replace,
      
       }))
    {.... HTML

    Pero ahora me inserta el registro dos veces u vota error, me dice que ese perfil para ese usuario ya esta creado.

    mira mi menu

    <div id="userlayout">
        <div id="usermenu">
            <div class="item">

     <div class="item">
               @Ajax.ActionLink("Nuevo", "role", "Account", new AjaxOptions {
                UpdateTargetId="usercontent",
                HttpMethod="GET",
                InsertionMode= InsertionMode.Replace
          })

    controlador= aqui le hago un breakpont y es donde me doy cuenta que antes de llegar al return ya esta insertado

      public ActionResult permisos()
            {

                var empleado = from p in bd.UserProfile
                               select new
                               {
                                   Id = p.UserName,
                                   Name = p.UserName + " - " + p.CodigoPersona
                               };

                string[] listroles =Roles.GetAllRoles();
                SelectList list = new SelectList(listroles);
                ViewBag.listrol=list;
                ViewBag.user = new SelectList(empleado, "Id", "Name");
                return View();
            }

            /// <summary>
            ///
            /// </summary>
            /// <param name="autorizacion"></param>
            /// <returns></returns>
            [HttpPost]
            public ActionResult permisos( FormCollection autorizacion)
            {
                var perfil = autorizacion["listrol"];
                var user = autorizacion["user"];
                Roles.AddUserToRole(user, perfil);
                return RedirectToAction("confirm", "Home");
            }
          


    erikpugo

    jueves, 5 de marzo de 2015 20:53
  • hola inserta el mensaje en el index del home,

    y luego cambia esto

    return RedirectToAction("Index", "Home");

    saludos.

    jueves, 5 de marzo de 2015 22:20