gpt4 book ai didi

asp.net-mvc - 如何在我的区域内进行 FindPartialView 搜索?

转载 作者:行者123 更新时间:2023-12-04 22:57:07 26 4
gpt4 key购买 nike

所以我在 Global.asax 中注册了所有区域:

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
//...
RouteConfig.RegisterRoutes(RouteTable.Routes);
}

但在我的 /Areas/Log/Controllers ,当我试图找到一个 PartialView :
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, "_LogInfo");

失败, viewResult.SearchedLocations是:
"~/Views/Log/_LogInfo.aspx"
"~/Views/Log/_LogInfo.ascx"
"~/Views/Shared/_LogInfo.aspx"
"~/Views/Shared/_LogInfo.ascx"
"~/Views/Log/_LogInfo.cshtml"
"~/Views/Log/_LogInfo.vbhtml"
"~/Views/Shared/_LogInfo.cshtml"
"~/Views/Shared/_LogInfo.vbhtml"

因此 viewResult.Viewnull .

我该如何制作 FindPartialView在我的区域搜索?

更新 :
这是我的自定义 View 引擎,已在 Global.asax 中注册:
public class MyCustomViewEngine : RazorViewEngine
{
public MyCustomViewEngine() : base()
{
AreaPartialViewLocationFormats = new[]
{
"~/Areas/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Views/Shared/{0}.cshtml"
};

PartialViewLocationFormats = new[]
{
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml"
};

// and the others...
}
}

但是 FindPartialView不使用 AreaPArtialViewLocationFormats :
"~/Views/Log/_LogInfo.cshtml"
"~/Views/Shared/_LogInfo.cshtml"

最佳答案

我遇到了完全相同的问题,我使用了一个中央 Ajax Controller ,在其中我从不同的文件夹/位置返回不同的部分 View 。

您将要做的是创建一个新的 ViewEngine源自 RazorViewEngine (我假设您使用 Razor)并在构造函数中显式包含新位置以在其中搜索部分。

或者,您可以覆盖 FindPartialView方法。默认情况下 Shared文件夹和当前 Controller 上下文中的文件夹用于搜索。

这是一个 example它向您展示了如何覆盖自定义中的特定属性 RazorViewEngine .

更新

您应该像这样在 PartialViewLocationFormats 数组中包含部分的路径:

public class MyViewEngine : RazorViewEngine
{
public MyViewEngine() : base()
{
PartialViewLocationFormats = new string[]
{
"~/Area/{0}.cshtml"
// .. Other areas ..
};
}
}

同样,如果你想在 Area 内的 Controller 中找到一个部分文件夹,那么您必须将标准局部 View 位置添加到 AreaPartialViewLocationFormats大批。我已经测试过了,它对我有用。

只要记得添加新的 RazorViewEngine给您的 Global.asax.cs ,例如:
protected void Application_Start()
{
// .. Other initialization ..
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new MyViewEngine());
}

以下是在名为“Home”的示例 Controller 中使用它的方法:
// File resides within '/Controllers/Home'
public ActionResult Index()
{
var pt = ViewEngines.Engines.FindPartialView(ControllerContext, "Partial1");
return View(pt);
}

我已将要查找的部分存储在 /Area/Partial1.cshtml 中小路。

关于asp.net-mvc - 如何在我的区域内进行 FindPartialView 搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15452312/

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