700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > mvc5控制器修改html ASP.NET MVC Razor:如何在控制器动作中呈现Razor局部视图的HTML...

mvc5控制器修改html ASP.NET MVC Razor:如何在控制器动作中呈现Razor局部视图的HTML...

时间:2023-03-26 03:51:06

相关推荐

mvc5控制器修改html ASP.NET MVC Razor:如何在控制器动作中呈现Razor局部视图的HTML...

我看到有人想知道如何为另一个控制器执行此操作。

就我而言,我的所有电子邮件模板都位于Views / Email文件夹中,但是您可以对其进行修改以传递与之关联了视图的控制器。

public static string RenderViewToString(Controller controller, string viewName, object model)

{

var oldController = controller.RouteData.Values["controller"].ToString();

if (controller.GetType() != typeof(EmailController))

controller.RouteData.Values["controller"] = "Email";

var oldModel = controller.ViewData.Model;

controller.ViewData.Model = model;

try

{

using (var sw = new StringWriter())

{

var viewResult = ViewEngines.Engines.FindView(controller.ControllerContext, viewName,

null);

var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);

viewResult.View.Render(viewContext, sw);

//Cleanup

controller.ViewData.Model = oldModel;

controller.RouteData.Values["controller"] = oldController;

return sw.GetStringBuilder().ToString();

}

}

catch (Exception ex)

{

Elmah.ErrorSignal.FromCurrentContext().Raise(ex);

throw ex;

}

}

从本质上讲,此操作是使用一个控制器(例如AccountController)并将其修改为一个EmailController,以便代码将在Views/Email文件夹中查找。这样做是有必要的,因为该FindView方法不会将直线路径作为参数,而是需要一个ControllerContext。

渲染完字符串后,它将AccountController返回到其初始状态,以供Response对象使用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。