值不能为空。参数名称:view

时间:2016-01-28 07:00:29

标签: asp.net-mvc-4 view rendering

我试图将动态视图呈现为字符串。我从here得到了这个想法并且它在本地运行良好但在托管上我收到以下错误。我的尝试是将字符串转换为字节为发送电子邮件

Value cannot be null. Parameter name: view

控制器

public ActionResult Index(int RegId)
    {
        try
        {
            var _mdlReceiptPdf = new ReceiptPdfVM
            {
                ...
                ...
            };

            string result = RazorViewToString.RenderRazorViewToString(this, Server.MapPath("~/Views/Shared/_Receipts.cshtml"), _mdlReceiptPdf);
            StringReader _sr = new StringReader(result);            

            return Json(result, JsonRequestBehavior.AllowGet);
        }
        catch (Exception ex)
        {
            return Json(ex.Message, JsonRequestBehavior.AllowGet);
        }          
    }

Util.cs

public static class RazorViewToString
    {

        public static string RenderRazorViewToString(this Controller controller, string viewName, object model)
        {

            controller.ViewData.Model = model;
            using (var sw = new StringWriter())
            {
                var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
                var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
                viewResult.View.Render(viewContext, sw);
                viewResult.ViewEngine.ReleaseView(controller.ControllerContext, viewResult.View);
                return sw.GetStringBuilder().ToString();
            }
        }

    }

2 个答案:

答案 0 :(得分:2)

我有这个问题。在我的情况下,事实证明部分视图没有上传到托管网站,因为在部分视图的文件属性中, BuildAction 设置为而不是内容

答案 1 :(得分:0)

是的,此错误似乎表明找不到视图。 就我而言,我在控制器中有一个视图名称的错字。 _QuickView.cshtml代替QuickView.cshtml