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对象使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值