Pregunta

Estoy construyendo un MVC 5 aplicación web.En la plantilla de diseño hay una lista desplegable que contiene una lista de nombres de usuario.Como este hay un menú desplegable en la plantilla de diseño, es accesible en todos los puntos de vista que heredan de la plantilla.

Cuando un usuario inicia sesión en el sitio y pasa la autenticación, se dirigen a el método de Índice en un Controlador.Este método acepta acepta valores null IDENTIFICADOR de tipo int.Cuando un usuario inicia sesión, el id pasado al método de Índice es siempre null.Entonces empiezo la sesión en la IDENTIFICACIÓN de usuarios y hacer una consulta para obtener sus datos (ver más abajo).

    public ActionResult Index(int? id)
    {
        DashboardViewModel model = new DashboardViewModel();

        if(id == null || id == 0)
        {
            User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
            model.SelectedUser = user;
        }
        else
        {
            model.SelectedUser = _userService.GetUserByID(id.Value);
        }

        return View(model);
    }

Me pase sus datos en un ViewModel y, a continuación, a un punto de Vista que, a continuación, escribe su dirección de correo electrónico a la interfaz de usuario.

@model MyApp.UI.ViewModels.DashboardViewModel

<h1>@Model.SelectedUser.email</h1>

Una vez que las vistas de usuario la interfaz de usuario, que puede, a continuación, seleccione otros usuarios de la lista desplegable.Cuando lo hacen, los usuarios seleccionados dirección de correo electrónico, debe reemplazar a la suya en la interfaz de usuario.

El proceso funciona así.El usuario selecciona un nombre de la lista desplegable de JQuery, se llama a la función

$(document).ready(function () {

    $("#UserID").change(GetUser);

    function GetUser() {

        $.ajax({
            type: "GET",
            url: '/Dashboard/Index/',
            data: { id: $(this).val() },
            error: function () {
                alert("An error occurred.");
            },
            success: function () {
                alert("success");
            }
        });
    }
});

Esta función pasa el ID de la lista desplegable de nuevo en el Índice de método en el Controlador.El método de Índice, esta vez, se da cuenta de la identificación NO es NULO, y por lo tanto, realiza una consulta para obtener el seleccionado de los detalles de los usuarios, basado en la identificación (véase el método de Índice de arriba).

Los detalles se ponen de nuevo en un ViewModel y pasa a la Vista.El modelo pasa a la Vista contiene los usuarios seleccionados detalles y, a continuación, debe escribir su dirección de correo electrónico a la interfaz de usuario

@model MyApp.UI.ViewModels.DashboardViewModel

<h1>@Model.SelectedUser.email</h1>

Sin embargo, aquí es donde mi problema.Aunque puedo paso a través de mi código a ver que todo funcione como se espera, no importa lo que el usuario seleccione de la lista desplegable, nunca cambia la dirección de correo electrónico que está escrito en la interfaz de usuario.

Esto es extraño porque puedo ver los usuarios seleccionados detalles que se pasa en el ViewModel, sin embargo, la interfaz de usuario nunca actualiza la dirección de correo electrónico.

Pido disculpas por el largo post, pero quería dar tantos detalles como sea posible en un intento de solucionar este problema lo he estado trabajando en esto durante más de un día sin ningún éxito.

Cualquier ayuda sería muy apreciada.

Gracias.

¿Fue útil?

Solución

Tan lejos como puedo ver que usted no está utilizando su $.ajax resultado del llamado en cualquier lugar.Usted acaba de mostrar Alerta y se hace.Usted necesita usar los datos en el resultado, pero como vas a devolver todo View y no sólo una PartialView es probable que sea mejor simplemente redirigir sobre el cambio desplegable:

$("#UserID").change(function()
    window.location.href = "/Dashboard/Index/" + $(this).val();
);

También puede utilizar @Url.Action("Index", "Dashboard") para evitar escribir la dirección url.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top