【问题标题】:Rendering part of a view from another view从另一个视图渲染视图的一部分
【发布时间】:2012-06-16 01:28:51
【问题描述】:

我正在将我的 WebForms 项目迁移到 MVC 并且很难设计东西。 我的应用程序的基本显示在_Layout。该页面分为 4 个部分(例如 A、B、C 和 D 部分),其中 3(A,B,C) 仅包含 html,而一个(D) 是动态的。我曾使用@RenderBody 来引入 D 部分的内容。但是,现在其他部分正在发生变化,我需要为这些部分使用单独的控制器。将其内容显示到 _Layout 中的最佳方法是什么?

@Html.RenderPartial / @Html.Partial / @Html.RenderAction / @Html.Action ?

我目前正在尝试使用 - @Html.Action("索引", "CController")

但是,这不起作用。

在 CController 的 Index.cshtml 中,我有 Layout = null,最初它被设置为指向 _Layout.cshtml,但我读到 here 说这会产生问题。

将 C 部分放入 CControllers 视图后,它不会显示之前显示的基本 _Layout 页面。

这是 CController 的 Index.cshtml -

<div id="noteContainerDiv">
    Here goes all the data to display
</div>

这是 CController.cs 的代码 -

public class CController : Controller
{        
    public ActionResult Index()
    {
        return PartialView();
    }

}

谁能提出正确的设计方法?

【问题讨论】:

  • 查看部分视图和子操作。这肯定会有所帮助。

标签: asp.net-mvc-3


【解决方案1】:

您可以做的是为您的子视图(您称为 D 的那个)创建一个视图模型,并从您的布局视图中传入此视图模型。

即通过在你的_Layout中做这样的事情:

@Html.Partial("_SubviewD", Model.SubviewDModel)

那么显然,在你的控制器中你需要初始化这个子视图模型并将它包含在你的模型中(或者,在 ViewBag 中——对建议的邪恶表示歉意!)你甚至可以找到方法来做到这一点而不改变你所有的控制器(例如,通过基本 Controller 类并覆盖 OnActionExecuted)。

【讨论】:

    【解决方案2】:

    有很多方法可以做到这一点。但我会坚持你最初的方法。

    让您的 CController 索引操作返回 PartialViewResult 而不是完整结果。

    您没有为局部视图设置布局。因此,在您的 CController 索引操作中,您将拥有如下内容:

    var model = ....
    return this.PartialView("NameOfYourPartialView", yourModel);
    

    当你打电话时

    @Html.Action("Index", "CController")
    

    一切都应该没问题,酷吗?

    【讨论】:

    • 我从您的评论中了解到我做错了什么。我已经修改了 C'c 控制器以返回一个局部视图来表示索引操作,并且当前在 Index.cshtml 中有静态 html。但是,仅包含 @Html.Action("Index", "C") 也不起作用。
    • 在您的操作中放置一个断点,该断点应该打印部分视图,以确保它是执行的。然后确保您的局部视图正常并且有东西要返回。可以贴在这里吗?
    • 当然,我已经编辑了我的问题并在那里添加了代码。目前,我只是想显示一些静态 html。
    • 为了只渲染静态内容,你可以使用@{ Html.RenderPartial("_FeaturedProduct"); }
    • 但是您是否设法在动作中放置断点以确保它被击中(应该,但只是为了确保)。另外,您使用的是 Action 还是 RenderAction 方法? RenderAction 方法应该像这样使用:@{ this.Html.RenderAction(...);而 Action 方法应该是:@this.Html.Action(...) (因为 RenderAction 写入响应并且 Action 只返回一个字符串,该字符串使用 @ 符号打印到页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    相关资源
    最近更新 更多