Asp.net MVC - 从区域渲染局部视图

时间:2010-12-08 16:53:21

标签: c# asp.net-mvc asp.net-mvc-areas renderpartial

我已经创建了一个区域,可以处理我们所有开发产品中的一些通用内容,就像登录,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项目时,我收到了查看错误,但错误告诉我它在区域文件夹和默认视图文件夹中都有查看。这次,我只获取默认文件夹。有没有办法实现这个目标?

谢谢大家!

3 个答案:

答案 0 :(得分:5)

我实际上并没有这么做,但我猜你应该假设你应该使用Html.RenderAction()来代替Html.RenderAction("action", "controller", new { area = "Area", model = ViewData.Model })

模型必须替换为操作参数的名称,但这应该有效。

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

答案 1 :(得分:1)

要记住的一件重要事情是,在使用RenderPartial时,您可以在当前操作的上下文中使用它。

由于您的操作不在某个区域,因此只能查看该操作所属的控制器的视图/文件夹,然后查看共享文件夹。

您希望在区域和控制器之间共享并且在路径上可用的任何视图应该是根视图/共享文件夹。实际上,如果视图可以像部分一样调用,那么它可能没有理由属于某个区域。

当你想渲染动作而不是部分动作时,你可以调用区域 - 然后将当前动作的上下文改变为你调用的动作,从而允许你在该区域内返回视图。

答案 2 :(得分:0)

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