Pergunta

Eu estou construindo um MVC 5 aplicação web.No modelo de esquema lá é uma lista suspensa que contém uma lista de nomes de usuário.Como esta lista é o modelo de layout, é acessível em todos os pontos de Vista que herdam a partir do modelo.

Quando um usuário faz logon no site e passa a autenticação, eles são direcionados para o método de Índice em um Controlador.Esse método aceita um anulável IDENTIFICAÇÃO do tipo int.Quando um usuário efetua logon, o id passado para o método de Índice é sempre nulo.Eu, então, obter os utilizadores registados ID e fazer uma consulta para obter os seus dados (veja abaixo).

    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 passa seus dados em um ViewModel e, em seguida, para uma Visão que, em seguida, grava o seu endereço de e-mail para a INTERFACE do usuário.

@model MyApp.UI.ViewModels.DashboardViewModel

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

Uma vez o usuário visualiza a INTERFACE do usuário, eles podem, em seguida, selecione outros utilizadores a partir da lista pendente.Quando eles fazem isso, os usuários selecionados endereço de e-mail deve substituir a sua na INTERFACE do usuário.

O processo funciona assim.O usuário seleciona um nome a partir da lista pendente, uma função é chamada JQuery

$(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 função passa a IDENTIFICAÇÃO a partir da lista pendente de volta para o método Index do Controlador.O método de Índice, desta vez, apercebe-se de que o id NÃO é NULO, e, portanto, realiza uma consulta para obter os usuários selecionados detalhes, com base na sua identificação (ver método de Índice acima).

Os detalhes são novamente colocados em um ViewModel e passado para o Visualizar.O modelo passou para o modo de Exibição contém a usuários selecionados detalhes e, em seguida, deve escrever o seu endereço de e-mail para a INTERFACE do usuário

@model MyApp.UI.ViewModels.DashboardViewModel

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

No entanto, este é o lugar onde o meu problema.Embora eu passo através do meu código vendo tudo funciona como esperado, não importa o que o usuário selecione a partir da lista pendente, nunca altera o endereço de e-mail que está escrito para a INTERFACE do usuário.

Isso é estranho, porque eu posso ver o selecionado os detalhes do usuário que está sendo passado para o ViewModel, no entanto, a INTERFACE do usuário nunca atualiza o endereço de e-mail.

Desculpas pelo longo post, mas eu queria dar o máximo possível de detalhes em uma tentativa de corrigir isso, como eu tenho vindo a trabalhar sobre isso por mais um dia, sem qualquer sucesso.

Qualquer ajuda seria muito apreciada.

Obrigado.

Foi útil?

Solução

Tanto quanto eu posso ver você não está usando seu $.ajax resultado da chamada de qualquer lugar.Você acabou de mostrar Alerta e pronto.Você precisa usar os dados no resultado, mas como você está devolvendo todo View e não apenas um PartialView é provavelmente melhor para apenas redirecionar sobre a alteração pendente:

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

Você também pode usar @Url.Action("Index", "Dashboard") para evitar a codificação de url.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top