Domanda

Sto costruendo un'applicazione web MVC 5.Nel modello di layout è presente un elenco a discesa che contiene un elenco di nomi utente.Poiché questo menu a discesa si trova nel modello di layout, è accessibile da tutte le visualizzazioni che ereditano dal modello.

Quando un utente accede al sito e supera l'autenticazione, viene indirizzato al metodo Index in un Controller.Questo metodo accetta un ID nullable di tipo int.Quando un utente accede, l'ID passato al metodo Index è sempre nullo.Quindi ottengo l'ID degli utenti registrati ed eseguo una query per ottenere i loro dettagli (vedi sotto).

    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);
    }

Passo i loro dettagli in un ViewModel e poi in una View che poi scrive il loro indirizzo email nell'interfaccia utente.

@model MyApp.UI.ViewModels.DashboardViewModel

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

Una volta che l'utente visualizza l'interfaccia utente, può selezionare altri utenti dall'elenco a discesa.In tal caso, l'indirizzo e-mail degli utenti selezionati dovrebbe sostituire il loro nell'interfaccia utente.

Il processo funziona in questo modo.L'utente seleziona un nome dall'elenco a discesa, viene chiamata una funzione 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");
            }
        });
    }
});

Questa funzione trasferisce l'ID dall'elenco a discesa al metodo Index nel Controller.Il metodo Index, questa volta, realizza che l'ID NON è NULL e pertanto esegue una query per ottenere i dettagli degli utenti selezionati, in base al loro ID (vedere Metodo Index sopra).

I dettagli vengono nuovamente inseriti in un ViewModel e passati alla View.Il modello passato alla vista contiene i dettagli degli utenti selezionati e dovrebbe quindi scrivere il loro indirizzo email nell'interfaccia utente

@model MyApp.UI.ViewModels.DashboardViewModel

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

Tuttavia, è qui che sta il mio problema.Anche se posso scorrere il mio codice vedendo che tutto funziona come previsto, indipendentemente dall'utente che seleziono dall'elenco a discesa, non cambia mai l'indirizzo e-mail scritto nell'interfaccia utente.

Questo è strano perché posso vedere i dettagli degli utenti selezionati trasmessi a ViewModel, tuttavia, l'interfaccia utente non aggiorna mai l'indirizzo e-mail.

Mi scuso per il post lungo, ma volevo fornire quanti più dettagli possibili nel tentativo di risolvere il problema, dato che ci sto lavorando da più di un giorno senza alcun successo.

Qualsiasi aiuto sarebbe molto apprezzato.

Grazie.

È stato utile?

Soluzione

Per quanto posso vedere, non stai usando il tuo file $.ajax risultato della chiamata ovunque.Basta mostrare Alert e il gioco è fatto.È necessario utilizzare i dati nel risultato, ma poiché vengono restituiti interi View e non solo a PartialView probabilmente è meglio reindirizzare semplicemente modificando il menu a discesa:

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

Puoi anche usare @Url.Action("Index", "Dashboard") per evitare l'hardcoding dell'URL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top