我正在将我的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?
我正在尝试使用 - 替换C部分 @ Html.Action(“索引”,“CController”)
但是,这不起作用。
在CController的Index.cshtml中,我的Layout = null,最初它被设置为指向_Layout.cshtml,但我读到here这就产生了问题。
将C部件放入CControllers视图后,它不会显示先前显示的基本_Layout页面。
<div id="noteContainerDiv">
Here goes all the data to display
</div>
public class CController : Controller
{
public ActionResult Index()
{
return PartialView();
}
}
有人能提出正确的设计方法吗?
答案 0 :(得分:0)
您可以做的是为子视图(您调用D的视图模型)创建一个视图模型,并从布局视图中传入此视图模型。
即。通过在_Layout中执行类似的操作:
@Html.Partial("_SubviewD", Model.SubviewDModel)
然后很明显在您的控制器中,您需要初始化此子视图模型并将其包含在您的模型中(或者,在ViewBag中 - 建议为邪恶道歉!)您甚至可以找到方法来执行此操作而无需更改所有控制器(例如通过基本的Controller类并覆盖OnActionExecuted
)。
答案 1 :(得分:0)
有很多方法可以做到这一点。但我会坚持你的初步方法。
让CController Index操作返回PartialViewResult而不是完整结果。
您没有为部分视图设置布局。所以在你的CController索引动作中你会有这样的东西:
var model = ....
return this.PartialView("NameOfYourPartialView", yourModel);
当你打电话
@Html.Action("Index", "CController")
一切都应该好,很酷?