将 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 字符串 - 错误“值不在预期范围内。”的主要内容,如果未能解决你的问题,请参考以下文章