Frage

Ich erstelle eine MVC 5-Webanwendung.In der Layoutvorlage gibt es eine Dropdown-Liste, die eine Liste mit Benutzernamen enthält.Da sich dieses Dropdown-Menü in der Layoutvorlage befindet, ist es in allen Ansichten zugänglich, die von der Vorlage erben.

Wenn sich ein Benutzer bei der Site anmeldet und die Authentifizierung besteht, wird er zur Index-Methode in einem Controller weitergeleitet.Diese Methode akzeptiert eine nullfähige ID vom Typ int.Wenn sich ein Benutzer anmeldet, ist die an die Index-Methode übergebene ID immer null.Anschließend erhalte ich die ID des angemeldeten Benutzers und führe eine Abfrage durch, um deren Daten zu erhalten (siehe unten).

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

Ich übergebe ihre Details an ein ViewModel und dann an eine View, die dann ihre E-Mail-Adresse an die Benutzeroberfläche schreibt.

@model MyApp.UI.ViewModels.DashboardViewModel

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

Sobald der Benutzer die Benutzeroberfläche anzeigt, kann er andere Benutzer aus der Dropdown-Liste auswählen.Wenn sie dies tun, sollte die E-Mail-Adresse des ausgewählten Benutzers ihre auf der Benutzeroberfläche ersetzen.

Der Prozess funktioniert so.Der Benutzer wählt einen Namen aus der Dropdown-Liste aus, eine JQuery-Funktion wird aufgerufen

$(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");
            }
        });
    }
});

Diese Funktion übergibt die ID aus der Dropdown-Liste zurück an die Index-Methode im Controller.Die Index-Methode stellt dieses Mal fest, dass die ID NICHT NULL ist, und führt daher eine Abfrage durch, um die Details des ausgewählten Benutzers basierend auf seiner ID abzurufen (siehe Index-Methode oben).

Die Details werden erneut in ein ViewModel eingefügt und an die View übergeben.Das an die Ansicht übergebene Modell enthält die Details des ausgewählten Benutzers und sollte dann seine E-Mail-Adresse an die Benutzeroberfläche schreiben

@model MyApp.UI.ViewModels.DashboardViewModel

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

Hier liegt jedoch mein Problem.Obwohl ich meinen Code schrittweise durchgehen kann und sehe, dass alles wie erwartet funktioniert, ändert sich die E-Mail-Adresse, die in die Benutzeroberfläche geschrieben wird, nie, unabhängig davon, welchen Benutzer ich aus der Dropdown-Liste auswähle.

Das ist seltsam, weil ich sehen kann, dass die Details des ausgewählten Benutzers an das ViewModel übergeben werden, die Benutzeroberfläche die E-Mail-Adresse jedoch nie aktualisiert.

Entschuldigung für den langen Beitrag, aber ich wollte so viele Details wie möglich geben, um das Problem zu beheben, da ich nun schon seit über einem Tag erfolglos daran arbeite.

Jede Hilfe wäre wirklich dankbar.

Danke.

War es hilfreich?

Lösung

Soweit ich sehen kann, verwenden Sie Ihr nicht $.ajax Rufen Sie das Ergebnis überall auf.Sie zeigen einfach Alert an und schon ist es erledigt.Sie müssen die Daten im Ergebnis verwenden, aber Sie geben sie als Ganzes zurück View und nicht nur ein PartialView Es ist wahrscheinlich besser, einfach beim Ändern des Dropdown-Menüs umzuleiten:

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

Sie können auch verwenden @Url.Action("Index", "Dashboard") um eine Hardcodierung der URL zu vermeiden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top