分享个代码,在mvc项目中,经常会在后端获取前端的视图html,下段代码就是在后台解析视图引擎获取到前端的页面(html)文本的。
public class RenderRazorViewToString
{
/// <summary>
/// 后台解析视图ViewResult获取到对应的html文本
/// </summary>
/// <param name="context">视图ViewResult所在的Controller</param>
/// <param name="actionName">需要解析的视图的方法名</param>
/// <param name="model">视图在加载时用到的数据模型</param>
/// <returns></returns>
public string Render(ControllerContext context, string actionName, object model)
{
//解析视图View获取的html文本
string viewStr = "";
//设置控制器的解析模型
context.Controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
//获取到视图解析后的View
var viewResult = ViewEngines.Engines.FindPartialView(context, actionName);
//生成对应的View内容
var viewContext = new ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(context, viewResult.View);
viewStr = sw.GetStringBuilder().ToString();
}
return viewStr;
}
}
上段代码可以在后台解析获取前端的html文本,可以根据传参获取。一般在后台使用的场景是:后台要获取前端的html文本作为参数传递给某个程序,非特殊情况不建议使用此方法来解析。