6

我创建了一个区域,它将处理我们所有开发产品中的一些通用事物,就像登录、HTML 帮助程序等。在该区域内,我有一个部分视图,我试图在该区域之外引用。我已经注册了该区域

public class Routes : AreaRegistration
{
    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Common_default",
            "Common/{controller}/{action}/{id}",
            new {
                controller = "Account",
                action = "Index",
                id = UrlParameter.Optional
            });
    }

    public override string AreaName
    {
        get { return "MvcCommons"; }
    }
}

现在在常规项目中,我正在尝试引用 MvcCommons 区域中的视图...

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>TestGrid</h2>

<% Html.RenderPartial("jQGridTable", ViewData.Model); %>

但我一直认为找不到该视图。之前,在创建 MVC Commons 项目时,我遇到了视图错误,但错误告诉我它同时查看了区域文件夹和默认视图文件夹。这一次,我只得到默认文件夹。有没有办法做到这一点?

谢谢大家!

4

3 回答 3

5

我实际上并没有这样做,但我猜我会假设你应该使用Html.RenderAction()类似的东西Html.RenderAction("action", "controller", new { area = "Area", model = ViewData.Model })

模型必须替换为动作参数的名称,但这应该可以。

编辑这将需要一个控制器并查看每个操作的设置。

于 2010-12-08T17:44:48.680 回答
1

需要记住的重要一点是,在使用 RenderPartial 时,您将在当前操作的上下文中使用它。

由于您的操作不在某个区域中,因此它只会在 View/ 文件夹中查找该操作所属的控制器,然后是共享文件夹。

您希望在区域和控制器之间共享并在路由中可用的任何视图都应该是根 View/Shared 文件夹。真的,如果视图可以作为局部视图调用,那么它可能没有什么理由属于一个区域。

当您想要呈现动作而不是局部时,您可以调用区域 - 然后将当前动作的上下文更改为您调用的动作,从而允许您返回该区域内的视图。

于 2010-12-08T17:44:31.833 回答
0

默认 ViewEngine 在引用用户控件的同一区域(或根)文件夹中查找视图。如果您想创建自定义方式来使用或存储视图,我建议您创建自定义 ViewEngine。请看一下这个例子:Implement Theme Folders using a Custom ViewEngine

于 2010-12-08T17:06:07.247 回答