2

考虑一个有 2 个区域的项目。

/区域/博客 /区域/仪表板

现在假设我的博客区域有一个 SpecialBlog 类型的编辑器。/Areas/Blog/Views/Blog/EditorTemplates/SpecialBlog.ascx

如果我的仪表板区域中的视图想要显示一个特殊的博客怎么办?

以下代码适用于“博客”区域内的视图,但不适用于“仪表板”区域。

Html.EditorFor (model => model)  // model is type SpecialBlog

即使提供路径失败,

Html.EditorFor (model => model, "~/Areas/Blog/Views/Blog/EditorTemplates/SpecialBlog.ascx")

我能得到工作的一件事是

Html.RenderPartial (Model, "~/Areas/Blog/Views/Blog/EditorTemplates/SpecialBlog.ascx");

但是,SpecialBlog 中的任何路由都会失败。(即,它有自己的 Html.EditorFor 调用博客区域中的其他编辑器模板)。

我在做一些根本错误的事情吗?

4

2 回答 2

0

我相信把它放在共享文件夹中会起作用。

如果您不想放入主 /shared 文件夹,您可以尝试在 ViewEngine 中设置另一个路径(在 Application_start 添加,或从您正在使用的路径派生)到 /areas/shared 文件夹(这个意味着,为所有区域创建文件夹)并将模板放在那里。

于 2011-02-21T10:35:30.950 回答
0

我有同样的问题,我想使用下面的

~/Areas/ActivityPicker/Views/ActivityPicker/EditorTemplates/ActivityPicker.cshtml

这远非福音,但我认为你不能做到这一点(在 MVC 5 中)。当我尝试并调试它时,它最终出现在下面。

“EditorTemplates/~/Areas/ActivityPicker/Views/ActivityPicker/EditorTemplates/ActivityPicker.cshtml”

即它在开头添加了EditorTemplates。

然后它查看了通常的位置来找到它,即视图和直接区域的视图 + 编辑器模板,因为它不以“~”开头,它不会检查所有位置,只检查公共视图和当前区域(检查 VirtualPathProviderViewEnginer::IsSpecificPath)

将 '~' 替换为 '../' 也无济于事,即您不能执行以下操作:

“EditorTemplates/../../../Areas/ActivityPicker/Views/ActivityPicker/EditorTemplates/ActivityPicker.cshtml”

出于同样的原因

即使这行得通,我也不想这样做,因为您将回复可能在后续版本中中断的副作用

因此,总而言之,我认为您目前不能,很乐意被告知否则,因为这对我来说似乎是一种限制。我想要一个页面上相同视图的多个实例,编辑器模板是为此建议的路线,但您不能在不同区域之间使用它们

于 2014-12-01T14:31:19.123 回答