C# 找不到视图

C# 找不到视图,c#,asp.net-mvc,viewengine,C#,Asp.net Mvc,Viewengine,使用以下代码: static string RenderViewToString(ControllerContext context,string viewPath,object model = null,bool partial = false) { // first find the ViewEngine for this view ViewEngineResult viewEngineResult = null; if (partial) viewE

使用以下代码:

static string RenderViewToString(ControllerContext context,string viewPath,object model = null,bool partial = false)
{
    // first find the ViewEngine for this view
    ViewEngineResult viewEngineResult = null;
    if (partial)
        viewEngineResult = ViewEngines.Engines.FindPartialView(context, viewPath);
    else
        viewEngineResult = ViewEngines.Engines.FindView(context, viewPath, null);

    if (viewEngineResult == null)
        throw new FileNotFoundException("View cannot be found.");

    // get the view and attach the model to view data
    var view = viewEngineResult.View;
    context.Controller.ViewData.Model = model;

    string result = null;

    using (var sw = new StringWriter())
    {
        var ctx = new ViewContext(context, view,
                                  context.Controller.ViewData,
                                  context.Controller.TempData,
                                  sw);
        view.Render(ctx, sw);
        result = sw.ToString();
    }

    return result;
}
在这一行之后:

viewEngineResult = ViewEngines.Engines.FindPartialView(context, viewPath);

执行时,我发现viewEngineResult为NULL,我认为这意味着即使我将视图正确放置在同一路径中,也找不到该视图。

我不确定代码返回NULL的原因,但这在控制器的上下文中对我有效:

    public string RenderRazorViewToString(string viewName, object model = null)
    {
        ViewData.Model = model;
        using (var sw = new System.IO.StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
            var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
            viewResult.View.Render(viewContext, sw);
            return sw.GetStringBuilder().ToString();
        }
    }
用法:

    var result = RenderRazorViewToString("_GridHeaderStudentCell");

您可以很容易地修改它,将ControllerContext作为一个参数,但是。

可能找不到您的视图,请确保您的视图放置在同名文件夹中, 像这样的 查找“日志”视图:

  • 视图文件夹
    • 日志文件夹
      • logs.cshtml文件

欢迎使用堆栈溢出。我已将您问题的标题更新为您遇到的实际相关问题。你对视图做什么并不重要,真正需要解决的问题(除非我弄错了)是找不到你的视图。谢谢。。。。是的,您是对的,未找到视图,但我给出了确切的路径..:(你所说的“将它……放在同一条路径上”是什么意思?IIRC,FindPartialView使用“按约定”搜索将在“视图”子文件夹中查找控制器,然后在“共享”中查找。您传递给调用的不是视图的路径,而只是视图名称。谢谢Craig W…是的,我是passong只是视图名称您可以发布一个如何使用此功能的示例吗?