【问题标题】:Asp.net MVC - Render a partial View From an AreaAsp.net MVC - 从区域渲染部分视图
【发布时间】:2010-12-08 16:53:21
【问题描述】:

我创建了一个区域,它将处理我们所有开发产品中的一些通用事物,例如登录、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 项目时,我遇到了视图错误,但错误告诉我它同时查看了区域文件夹和默认视图文件夹。这一次,我只得到默认文件夹。有没有办法做到这一点?

谢谢大家!

【问题讨论】:

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


    【解决方案1】:

    我实际上并没有这样做,但我猜测你应该使用Html.RenderAction(),而不是Html.RenderAction("action", "controller", new { area = "Area", model = ViewData.Model })

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

    编辑不过,这将需要为每个操作设置控制器和视图。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-18
          • 2018-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多