获取asp.net mvc view渲染后的页面字符串

查看源码可以替换Response.Output来获取asp.net mvc view渲染后的页面字符串,如下:

using System;
using System.Globalization;
using System.IO;
using System.Web;
using System.Web.Mvc;

namespace xxxx
{
	public static class WebMvcHelper
	{
		public static string Render(this Controller controller, string viewName, object model = null, bool partial = false)
		{
			return Render(controller.ControllerContext, viewName, model, partial);
		}

		public static string Render(this Controller controller, ViewResultBase viewResult)
		{
			return Render(controller.ControllerContext, viewResult);
		}

		public static string Render(this ControllerContext context, string viewName, object model = null, bool partial = false)
		{
			if (context == null) throw new ArgumentNullException("context");
			var controller = context.Controller;
			if (model != null) controller.ViewData.Model = model;
			ViewResultBase viewResult;
			if (partial) viewResult = new PartialViewResult();
			else viewResult = new ViewResult { MasterName = null };
			viewResult.ViewData = controller.ViewData;
			viewResult.TempData = controller.TempData;
			viewResult.ViewName = viewName;
			return Render(context, viewResult);
		}

		public static string Render(this ControllerContext context, ViewResultBase viewResult)
		{
			if (context == null) throw new ArgumentNullException("context");
			if (string.IsNullOrEmpty(viewResult.ViewName)) viewResult.ViewName = context.RouteData.GetRequiredString("action");

			ViewEngineResult viewEngineResult = null;
			if (viewResult.View == null)
			{
				viewEngineResult = (viewResult is PartialViewResult) ?
				           ViewEngines.Engines.FindPartialView(context, viewResult.ViewName) :
				           ViewEngines.Engines.FindView(context, viewResult.ViewName, (viewResult as ViewResult).MasterName);
				viewResult.View = viewEngineResult.View;
			}
			try
			{
				var output = new StringWriter(CultureInfo.InvariantCulture);
				var viewContext = new ViewContext(context, viewResult.View, viewResult.ViewData, viewResult.TempData, output);
				viewResult.View.Render(viewContext, output);
				return output.ToString();
			}
			finally
			{
				if (viewEngineResult != null) viewEngineResult.ViewEngine.ReleaseView(context, viewResult.View);
			}
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值