Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ActionFilterAttribute.OnActionExecuted中设置布局有问题_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Razorgenerator - Fatal编程技术网

C# 在ActionFilterAttribute.OnActionExecuted中设置布局有问题

C# 在ActionFilterAttribute.OnActionExecuted中设置布局有问题,c#,asp.net,asp.net-mvc,asp.net-mvc-4,razorgenerator,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razorgenerator,我试图在自定义的actionfilteratAttribute中设置布局路径,我编写了以下内容: public class LayoutInjecterAttribute : ActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext filterContext) { base.OnActionExecuted(filterContext);

我试图在自定义的
actionfilteratAttribute
中设置布局路径,我编写了以下内容:

public class LayoutInjecterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
        var result = filterContext.Result as ViewResult;
        if (result != null)
        {
            result.MasterName = "~/Views/Layouts/Test.cshtml"
        }
    }
}
这里Test.cshtml是另一个项目中的预编译视图(借助于
razogenerator

但它给了我一个错误:

找不到视图“索引”或其主视图,或者没有视图引擎支持搜索的位置。搜索了以下地点: ~/Views/Home/Index.cshtml ~/Views/Shared/Index.cshtml ~/Views/Home/Index.aspx ~/Views/Home/Index.ascx ~/Views/Shared/Index.aspx ~/Views/Shared/Index.ascx ~/Views/Layouts/Test.cshtml

控制器实际上很简单:

[LayoutInjecter]
public class HomeController : Controller
{
    public ActionResult Index()
    {
       return View();
    }
}

它起作用了。确保布局路径
“~/Views/Layouts/Test.cshtml”
正确


另外,请确保“Test.cshtml”是一个布局页面,而不是视图/局部视图。

错误表明
LayoutInjecter
工作正常。你说:

在这里Test.cshtml是另一个项目中的预编译视图

但是不支持使用来自不同(web项目外部)的razor视图。不过,有一个工具可以预编译razor视图,然后您可以将它们放入任何调用的DLL中。 编译器找不到指定的主布局文件,并显示此错误

有关更多信息,请参阅

编辑:预编译的MVCViewEngine如何知道要渲染哪个视图?

PrecompiledMvcViewEngine
仍然依赖于ASP.NET MVC视图文件夹约定,使用相对文件路径来定位视图。然而,这有点误导。
预编译的mvcviewengine
不查看物理文件;它查找Razor单文件生成器添加到其生成的每个视图(包括视图的相对文件路径)中的
System.Web.WebPages.PageVirtualPathAttribute


编辑2:我相信可以在中找到您问题的指导。

result.MasterName=“~/Views/Layouts/Test.cshtml”
更改为
result.MasterName=“~/Views/Shared/Test.cshtml”
。 按照惯例,框架在asp.net mvc解决方案的~/Views/Shared/目录中查找布局页面。
在我看来,您正在动态或在运行时选择母版页。

您是否创建了控制器布局?不,没有任何名为“布局”的控制器。请添加一个名为“布局”的新控制器,然后创建一个名为“测试”的新操作结果并返回视图,这应该是所有项目中可用的Layouts文件夹吗?不是。只有library项目有该文件夹。我尝试向mvc项目添加一个空文件夹,但没有任何更改:(实际上我已经使用了RazorGenerator。@Kaan我对我的答案进行了编辑。你能检查生成的文件是否出现在项目的
obj
目录中,并且视图是否被编译到项目程序集中吗?我不知道为什么,但是,如果两个项目在同一个解决方案中,它就可以工作。但是如果它们在不同的解决方案中,它就不能工作“不行!@Kaan请看我的编辑2。我所有的视图都标记为“内容”。我认为这对我没有帮助。路径正确,Test.chstml只是一个布局页面。