[C#] Razor-View in String umwandeln

  • C# (ASP)
  • (Core) Razor

    [C#] Razor-View in String umwandeln

    Hi zusammen,

    ich würde gerne eine Razor-View zu einem String rendern, um sie anschließend als Mail-Template nutzen zu können. Habe den Code zum Rendern in einen anderen Controller (MailController) ausgelagert, um ihn von verschiedenen anderen Controllern aus ansprechen zu können. Die Views liegen alle gesammelt in ~/Views/Mail, das würde ich gern auch dabei belassen.

    Der Code zum Rendern im MailController:

    C#-Quellcode

    1. using System.IO;
    2. using System.Web.Mvc;
    3. namespace Shop_3.Controllers
    4. {
    5. public class MailController : BaseController
    6. {
    7. public string RenderRazorViewToString(string viewName, object model)
    8. {
    9. ViewData.Model = model;
    10. using (var sw = new StringWriter())
    11. {
    12. var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext,
    13. viewName);
    14. var viewContext = new ViewContext(ControllerContext, viewResult.View,
    15. ViewData, TempData, sw);
    16. viewResult.View.Render(viewContext, sw);
    17. viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
    18. return sw.GetStringBuilder().ToString();
    19. }
    20. ;
    21. }
    22. }
    23. }


    Diesen versuche ich wie folgt aus bspw. dem AccountController aufzurufen:

    C#-Quellcode

    1. ...
    2. var renderHelper = new MailController();
    3. var model = new Login() {Password = "...", Redirect = "...", Username = "..."};
    4. string result = renderHelper.RenderRazorViewToString("Login", model);
    5. ...


    Mein Problem ist, dass der ControllerContext im MailController null ist. Wieso ist das so und wie kann man das fixen?

    Danke im Voraus!

    *Topic verschoben*
    "Es ist sehr einfach, ein Programm zu schreiben, das innerhalb kürzester Zeit und mit wenig Speicherplatzbedarf ein vorgegebenes Problem NICHT löst." - H.A. Klaeren

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()