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中。
编译器找不到指定的主布局文件,并显示此错误
有关更多信息,请参阅
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只是一个布局页面。