gpt4 book ai didi

asp.net-mvc - 如何更改 View 和局部 View 默认位置

转载 作者:行者123 更新时间:2023-12-04 13:11:34 24 4
gpt4 key购买 nike

我是 MVC 的新手,非常想知道如何更改 View 和局部 View 位置。

我们知道 View 和部分 View 存储在 View 文件夹中。如果我的 Controller 名称是 home,则 View 必须存储在 View 文件夹内的主文件夹中,而所有局部 View 存储在共享文件夹中。我想知道如何更改 View 和部分 View 的默认位置?

1) 假设我的 Controller 名称是 product 但我想将相应的 View 存储在 myproduct 文件夹中......指导我需要做什么才能使一切正常。

2)我想将所有局部 View 存储在 View 文件夹内的局部文件夹中,并希望从那里加载所有局部 View 。所以指导我我需要做什么才能使一切正常。

基本上我怎么能指示 Controller 从我的文件夹加载 View 和部分 View 而不提及路径。寻找好的讨论。谢谢

最佳答案

如果您想为特定 Controller 设置特殊的 View 位置,在您希望 ProductController View 转到 MyProduct 文件夹的情况下,您需要覆盖 FindViewFindPartialView RazorViewEngine 的方法:

public class MyRazorViewEngine : RazorViewEngine
{
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
if (controllerContext.Controller is ProductController)
{
string viewPath = "/Views/MyProduct/" + viewName + ".cshtml";
return base.FindView(controllerContext, viewPath, masterName, useCache);
}

return base.FindView(controllerContext, viewName, masterName, useCache);
}

public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache)
{
if (controllerContext.Controller is ProductController)
{
string partialViewPath = "/Views/MyProduct/Partials/" + partialViewName + ".cshtml";
return base.FindPartialView(controllerContext, partialViewPath, useCache);
}

return base.FindPartialView(controllerContext, partialViewName, useCache);
}
}

如果您可能想在每个 Controller View 文件夹中添加“My”,您的 View 引擎应该如下所示
public class MyRazorViewEngine : RazorViewEngine
{
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
string viewPath = "/Views/My" + GetControllerName(controllerContext) + "/" + viewName + ".cshtml";
return base.FindView(controllerContext, viewPath, masterName, useCache);
}

public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache)
{
string partialViewPath = "/Views/My" + GetControllerName(controllerContext) + "/Partials/" + partialViewName + ".cshtml";
return base.FindPartialView(controllerContext, partialViewPath, useCache);
}

private string GetControllerName(ControllerContext controllerContext)
{
return controllerContext.RouteData.Values["controller"].ToString();
}
}

而不是在你的 Global.asax
protected void Application_Start()
{
//remove unused view engines, for performance reasons as well
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new MyRazorViewEngine());
}

关于asp.net-mvc - 如何更改 View 和局部 View 默认位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19212664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com