0

我正在将我的 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("Index", "CController") 替换 C 部分

但是,这是行不通的。

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

将 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();
    }

}

任何人都可以提出正确的设计方法吗?

4

2 回答 2

0

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

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

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

然后显然在您的控制器中,您需要初始化此子视图模型并将其包含在您的模型中(或者,在 ViewBag 中 - 对建议的邪恶表示歉意!)您甚至可以找到方法在不更改所有控制器的情况下执行此操作(例如通过基本 Controller 类和覆盖OnActionExecuted)。

于 2012-06-15T14:23:41.710 回答
0

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

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

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

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

当你打电话时

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

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

于 2012-06-15T14:36:41.040 回答