Envoyer asp.net mvc action résultat à l'intérieur de l'email
Je voudrais utiliser mon Action asp.net mvc, comme moteur de template, que des résultats sous forme de chaîne de caractères, que je pouvais envoyer par e-mail.
Pseudo-Code:
public ActionResult Register()
{
SendEmail(View().ToString());
return new EmptyResult();
}
- Pouvez-vous préciser ce que vous voulez faire?
- Avec pseudo? Est-il plus clair?
- Des requêtes vers un serveur web de retourner quelque chose. Qu'attendez-vous pour le retour? Le HTML? JSON? Quelque chose d'autre? Ou êtes-vous demander comment faire pour envoyer des e-mail? Non, il n'est pas encore clair.
- >>Ce que vous attendez-vous au retour? Il retourne EmptyResult, il semble très clair dans le code de pseudo! J'ai besoin d' - View().ToString()
- [Voici ](stackoverflow.com/questions/483091/render-a-view-as-a-string/...) comment faire pour obtenir l'affichage en tant que chaîne de caractères.
- c'est vraiment une question confuse! je pense que pour la plupart des gens de se retrouver ici, c'est ce qu'ils sont actaully vouloir! cette question est en fait de la même specificcaly au sujet d'obtenir le point de vue d'un e-mail à l'intérieur d'un autre contrôleur
- MvcMailer obtenu exactement ce que vous cherchez. Voir le package NuGet ici et la documentation de projet j'Espère que ça aide!
- Cet article fournit la meilleure réponse pour moi: Rendre toute ASP.NET MVC ActionResult à une chaîne de caractères
- Il y a un bel article comment utiliser RazorEngine pour que les fins: Comment créer un texte localisables moteur de template à l'aide de RazorEngine
- Comment est-ce la réponse n'est pas upvoted plus? Il est de loin le plus rapide, plus simple et couvre l'OP est question plus complètement par rapport à de nombreux autres, plus upvoted réponses.
- Alors que ce lien peut répondre à la question, il est préférable d'inclure les parties essentielles de la réponse et de fournir le lien de référence. Lien-ne répond peut devenir non valide si la page liée changements. - Revue
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous aurez probablement envie de retourner une vue de votre action, afin de retourner un EmptyResult n'est pas le meilleur, mais vous allez comprendre que quand vous avez affaire avec le flux de page dans votre processus d'inscription.
Je suis en supposant que vous souhaitez créer un e-mail HTML à l'aide d'un point de Vue, vous avez déjà créé. Cela signifie que vous le souhaitez pour prendre la suite de quelque chose qui ressemble à la suivante:
et d'envoyer ce que le corps de l'email. Vous obtenez de réutiliser vos points de vue et tous les trucs fun.
Vous pouvez profiter du cadre par la création d'une coutume ActionResult et l'utiliser pour générer votre texte.
Voici quelques-c#-comme le pseudo-code qui puisse compiler et de travail. Tout d'abord, la coutume ActionResult:
Ceci remplace la base de la méthode ExecuteResult (c'est le code de la méthode de base je suis primordial; peut-être changé en RC1) à rendre à un flux que je contrôle au lieu de le flux de Sortie de la Réponse. Donc, il en extrait le texte exactement comment il est rendu à la machine client.
Prochaine, comment vous pouvez l'utiliser dans une action de contrôleur:
Je suis rendu au même point de vue, deux fois; la première fois que j'ai rendu à un flux de données et la deuxième fois, j'ai rendu normalement. Il pourrait être possible de se faufiler dans la chaîne d'appel de ViewResult quelque part d'autre et changer la façon dont le Rendu fonctionne, mais un rapide coup d'œil au code de ne pas révéler quoi que ce soit. Bien que le cadre est très bonne, la pile d'appel pour les pièces de la procédure sont tout simplement pas à grain fin assez pour le rendre facile de changer une seule étape dans le processus. Si ils ont cassé ExecuteResult dans un certain nombre de différentes méthodes substituables, nous pourrions avoir changé de rendre le flux de sortie pour le rendu de nos flux sans écraser l'ensemble de la ExecuteResult méthode. Eh bien....
Je n'ai pas assez de rep de commenter, mais j'ai pensé que je devais sauver les gens en peu de temps, en soulignant qu'il nous semble que l'on a accepté la réponse serait de travailler et ce serait génial si il l'a fait. Cependant, il semble que les WebForm Moteur d'Affichage mange juste la TextWriter paramètre. Il n'y a plus d'infos ici: http://ayende.com/Blog/archive/2008/11/11/another-asp.net-mvc-bug-rendering-views-to-different-output-source.aspx
http://www.brightmix.com/blog/renderpartial-to-string-in-asp-net-mvc/ a une bonne solution pour le rendu d'une Vue à une chaîne de sorte que vous pouvez l'envoyer par e-mail. Il note "du rendu d'une vue partielle de la chaîne a, heureusement, devenir beaucoup, beaucoup plus facile."
Vous ne pouvez pas voir la vue elle-même à l'intérieur du contrôleur. La façon de faire ce que vous demandez serait d'écrire une coutume ActionResult sous-classe, et une coutume ViewEngine de le gérer. Remplacer ExecuteResult d'envoyer l'e-mail. Regardez l'open-source Étincelle, NHAML, etc., afficher les moteurs de MVC pour des exemples.
Hey, à partir de ce que je lis (et ma propre tentative de mettre en œuvre votre solution) le point de Vue.Méthode Render ignore complètement l'écrivain paramètre. Le contenu de mon écrivain est toujours vide et le rendu de la vue est lâché dans le flux de réponse. Il semble donc impossible (ou plutôt compliquée au moins) pour obtenir votre utilisation vous vue comme ça. Je pense que dans votre cas de test vous souhaitez voir le rendu de la vue deux fois, et votre e-mail serait vide.
J'ai trouvé une discussion sur ce sujet ici: http://ayende.com/Blog/archive/2008/11/11/another-asp.net-mvc-bug-rendering-views-to-different-output-source.aspx