Exibição do MVC não é atualizado Após a Chamada JQuery
-
21-12-2019 - |
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.
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.