我如何嵌套视图?

时间:2011-05-06 00:53:01

标签: asp.net-mvc-3 view razor

我目前在视图中有一个DIV,我在运行时(通过jQuery)使用另一个控制器的create视图。这是有效的,但当我看到页面时,div是空的(当然)。我这样做是因为我还没弄清楚如何在视图中嵌入视图。

我需要的是某种包含声明。我发现@RenderPage()但不会发出控制器方法调用。

4 个答案:

答案 0 :(得分:3)

Html.Action将允许您在视图内部嵌套视图进行调用 - 通常只会在返回部分视图的方法上执行此操作,但这将在此处完成工作。

请参阅Html.Action vs Html.RenderAction

答案 1 :(得分:1)

在我看来,这是关于MVC最难的事情之一。你可以使用

@Html.DisplayFor(model=>model.something, "SomeDisplayTemplate")

但这仅适用于仅显示视图,而不适用于可编辑视图。对于那些,特别是在主要模型具有您想要为其提供编辑的集合的(通用)用例中,您需要实现类似Jarret在此推荐的内容:

http://jarrettmeyer.com/post/2995732471/nested-collection-models-in-asp-net-mvc-3

答案 2 :(得分:0)

我实际上是使用jQuery.Post转到我的控制器,然后返回一个PartialView。

然后我获取返回的HTML并使用jQuery将html放入目标div。

控制器代码

public ActionResult jQuery_GetEditPositionView(string id)
{
    PositionsRepository repository = new PositionsRepository();
    contract model = repository.Single(x => x.id == new Guid(id));
    return PartialView("ContractPositionEdit", model);
}

jQuery / Javascript

    function editPosition(id) {
        $.post('/Member/jQuery_GetEditPositionView', { id: id }, function (newHTML) {
            $('#newPositionDialog').html(newHTML);
            $("#newPositionDialog").dialog("open");
            $(".frmNewContract").validate();
        });
    }

答案 3 :(得分:0)

如果您只是希望在视图中嵌入“视图”,则可以使用partials的概念来完成此操作,请参阅Html.Partial()

例如,在标准的ASP.NET表示法中: <%= Html.Partial(string partialViewName) %>

或使用Razor语法: @Html.Partial(string partialViewName)

例如:<%= Html.Partial("_myView") %>_myView.ascxViews\<action>文件夹中的Shared

祝你好运。