9
votes

Comment puis-je conserver l'URL (avec le QUERYString) après un poteau HTTP, mais également ajouter une erreur à l'état modèle?

Vous voulez essentiellement que j'essaye de faire est d'authentifier un utilisateur en les ayant entré dans leur compte et leur numéro de sécurité sociale. S'ils entrent une combinaison incorrecte, je passe les éléments suivants sur le authentifier Post Action: xxx

ceci affiche l'erreur, mais je perds ce qui était dans ma chaîne de requête . Une alternative à la limite de la chaîne de requête est la suivante: xxx

Ceci conservera la chaîne de requête, mais l'erreur ne s'affiche pas. Je suppose que c'est parce que le modélistate a changé.

J'ai besoin du retournerl car l'utilisateur est forcé au authentifier page Chaque fois qu'ils cliquent pour afficher un événement spécifique. Je veux le configurer afin qu'ils vont toujours à cet événement une fois qu'ils se sont authentifiés.

existe une façon de réaliser à la fois la préservation de la chaîne de requête et d'afficher l'erreur de modèle?


0 commentaires

3 Réponses :


5
votes

Votre deuxième scénario n'a pas l'état modèle car lorsque vous faites une redirection, le navigateur fait une demande distincte à cet emplacement, des demandes séparées = nouvel état modèle.

Je suggérerais d'utiliser votre premier scénario et de placer un " Return "dans votre modèle et le rend sur le client comme champ caché. xxx


5 commentaires

Ou simplement passer dans l'URL de retour à l'aide du ViewBag pour éviter de polluer votre joli modèle .


Au contraire, le mettre dans le modèle le rend plus propre, car regarder le modèle vous montrera ce qu'il faut être à la vue. Le point de vue obscurcit votre mise en œuvre.


Merci! Cela fonctionne bien! Si je devais aller à l'approche ViewBag , comment continuer à perdre le returnrl si l'utilisateur n'est pas authentifié correctement? D'après ce que j'ai vu, retournerl deviendra null si un utilisateur ne s'authentifie pas correctement lors de sa première tentative. Est-ce que je manque quelque chose avec ça?


Si vous choisissez d'utiliser ViewBag , vous devrez écrire le champ masqué dans la zone de formulaire de votre vue, puis sur la requête suivante de votre méthode de contrôleur interrogeez la demande objet pour le champ de formulaire "retour".


J'ai la même situation ici, et je n'obtiens pas à quel point le réglage de retour dans le champ caché a-t-il résolu ce problème? Est-ce qu'il redirige-t-il à returerl via JavaScript? Dans cette situation, il n'y aura pas de modèle de message Valition affiché?



8
votes

La réponse de Ivan Korytin était la réponse. Meilleur (et seulement la réponse que je pouvais trouver ce qui semblait bien fonctionner correctement sans utiliser de hacks de terrain cachés) que j'ai Amélioration d'un peu avec Demande.QuiserystString .

Vous devez mettre les paramètres dans le cadre de l'action du formulaire: xxx

Lorsque vous exécutez les suivantes La chaîne de requête (et obtenez paramètres) sont maintenant conservées: xxx


0 commentaires

0
votes

pour ASP.NET CORE FORT> Vous pouvez utiliser ASP-Route-* Attribut:

// GET: Vehicle/Edit/5
    public ActionResult Edit(int id,string previous)
    {
            var model = this.UnitOfWork.CarsRepository.GetAllByCarId(id).FirstOrDefault();
            var viewModel = this.Mapper.Map<VehicleViewModel>(model);//if you using automapper
    //or by this code if you are not use automapper
    var viewModel = new VehicleViewModel();

    if (!string.IsNullOrWhiteSpace(previous)
                viewModel.ReturnUrl = previous;
            else
                viewModel.ReturnUrl = "Index";
            return View(viewModel);
        }



[HttpPost]
    public IActionResult Edit(VehicleViewModel model, string previous)
    {
            if (!string.IsNullOrWhiteSpace(previous))
                model.ReturnUrl = previous;
            else
                model.ReturnUrl = "Index";
            ............. 
            .............
            return RedirectToAction(model.ReturnUrl);
    }


2 commentaires

J'ai ajouté un exemple, j'espère que ce sera utile


Ce n'est pas vraiment valable pour les tags sur la question - TagHelPers a été ajouté dans ASP.NET CORE . Pourrait vouloir en faire une note de cela dans votre réponse.