将 MVC 视图转换为 HTML 字符串 - 错误“值不在预期范围内。”

Posted

技术标签:

【中文标题】将 MVC 视图转换为 HTML 字符串 - 错误“值不在预期范围内。”【英文标题】:Convert MVC View to HTML string - Error " Value does not fall within the expected range." 【发布时间】:2016-10-26 07:53:43 【问题描述】:

以下是我的行动

 public PartialViewResult PrintOrder(string orderNo)
        
            ViewBag.OrderId = orderNo;
            return PartialView();
        

以下是我的代码

public static String RenderViewToString(PartialViewResult result,ControllerContext context, String viewPath,string orderNo, object model = null)
        

            context.Controller.ViewData.Model = model;
                using (var sw = new StringWriter())
                
                    result.View = ViewEngines.Engines.FindPartialView(context, "PrintOrder").View;

                    ViewContext vc = new ViewContext(context, result.View, result.ViewData, result.TempData, sw);

                    result.View.Render(vc, sw);

                    var html = sw.GetStringBuilder().ToString();

                    return html;
            

                //return "No Data";
        

我在 result.View.Render(vc, sw) 收到错误,因为“值不在预期范围内。”

什么是错误?

【问题讨论】:

看到***.com/questions/11996205的坏消息。 【参考方案1】:

如果需要将部分视图转换为 html 字符串并从控制器返回字符串,请尝试此代码。

Public ActionResult PrintOrder(string orderNo) 

//code to get the model
this.ViewData.Model = YourModel;
//ViewData["ordno"] = orderNo; uncomment this if you need 
var htmlStr = string.Empty;
try 
    var sw = new StringWriter();
    var viewResult = ViewEngines.Engines.FindPartialView(this.ControllerContext, "partialviewName");
    var viewContext = new ViewContext(this.ControllerContext, viewResult.View, this.ViewData, this.TempData, sw);
    viewResult.View.Render(viewContext, sw);
    viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
    htmlStr = sw.GetStringBuilder().ToString();
catch(Exception e)


return htmlStr;

【讨论】:

这与问题有什么关系?而且代码只是OP的代码的重复!

以上是关于将 MVC 视图转换为 HTML 字符串 - 错误“值不在预期范围内。”的主要内容,如果未能解决你的问题,请参考以下文章

带有实体框架和 SQL Server 数据库的 ASP.NET MVC - 图像未显示在视图中......错误显示“无法将“字节”转换为“字符串”

为啥 MVC 在将对象传递给视图时倾向于将对象转换为数组?

是否可以将单个MVC剃刀视图/页面转换为SPA?

从 ASP.NET MVC 中的字符串获取 Html 代码

在 MVC5 中创建一个下拉列表

MVC Preview 5 - 将视图渲染到字符串以进行测试