web-dev-qa-db-fra.com

Comment renvoyer ActionResult avec une vue spécifique (pas le nom du contrôleur)

J'ai une méthode SendMail dans le contrôleur MVC. Cette méthode appelle une autre méthode ValidateLogin. Il s'agit de la signature de la connexion de validation:

private ActionResult ValidateLogin(Models.ResetPassword model)

Lorsque j'appelle ValidateLogin à partir de SendMail, cette exception apparaît parce que le contrôleur essaie de rechercher une vue SendMail, mais je veux charger la vue ResetPassword:

Global Error - The view 'SendMail' or its master was not found or no view engine supports the searched locations. The following locations were searched: ...

Voici le code du SendMail:

public ActionResult SendMail(string login)
{
        return ValidateLogin(login);
}

Comment puis-je remplacer la vue sur la déclaration de retour?

Merci d'avance

23
clement

enfin, c'était la solution

return View("ResetPassword", new ResetPassword
            {
                fields= fields
            });
7
clement
private ActionResult SendMail(string login)
{
            return View("~/Views/SpecificView.cshtml")
}

Vous pouvez pointer directement vers une vue spécifique en pointant explicitement leur emplacement.

40
Kaushik Vatsa

La méthode View a une surcharge qui renvoie une chaîne à un viewName. Parfois, vous voulez passer un string comme modèle et le framework asp.net le confond en essayant de trouver une vue avec la valeur string. Essayez quelque chose comme ceci:

public ActionResult SendMail(string login)
{
   this.Model = login; // set the model
   return View("ValidateLogin"); // reponse the ValidateLogin view
}
8
Felipe Oriani

Vous pouvez renvoyer la vue par un nom comme celui-ci

return View("viewnamehere");
0
Mairaj Ahmad