Asp.net mvc 3 如何嵌套视图?

Asp.net mvc 3 如何嵌套视图?,asp.net-mvc-3,view,razor,Asp.net Mvc 3,View,Razor,我当前在一个视图中有一个DIV,在运行时(通过jQuery)使用另一个控制器的create视图I.load()将其加载。这是可行的,但是当我查看页面时,div是空的(当然)。我这样做是因为我还没有弄清楚如何在视图中嵌入视图 我需要的是某种包含声明。我找到了@RenderPage(),但它不会发出控制器方法调用。我实际上使用jQuery.Post访问了我的控制器,并返回了一个PartialView 然后,我获取返回的HTML并使用jQuery将该HTML放入目标div 控制器代码 public A

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


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

我实际上使用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();
        });
    }

Action将允许您在进行该调用的视图中嵌套一个视图——通常您只会在返回部分视图的方法上这样做,但这将在这里完成工作


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

@Html.DisplayFor(model=>model.something, "SomeDisplayTemplate")
但这只适用于仅显示视图,而不适用于太多可编辑视图。对于这些,特别是在(常见)用例中,主模型有一个您想要为其提供编辑器的集合,您需要实现类似于Jarret在此处建议的内容:


如果您只是希望在视图中嵌入一个“视图”,您可以使用部分的概念来实现这一点,请参阅

例如,在标准ASP.NET表示法中:

或者使用Razor语法:
@Html.Partial(字符串partialViewName)

例如:
(将是
\u myView.ascx
,位于
视图\
共享文件夹中


祝你好运。

如果你需要使用jQuery加载部分视图,只要让jQuery调用控制器上的action方法,返回PartialViewResult;如果你用[ChildActionsOnly]修饰该action方法当您通过AJAX调用它时,它可能不起作用,但我不知道这一点。用jQuery加载部分视图就是我所做的。问题是,您不能只查看源代码并查看div内部的内容,因为您只会看到一个空div……您必须使用调试器来查看。您对Html.Action的建议非常有效!forg我知道,但我不清楚如何指定给定的视图,例如,我有/Views/Product/Create.cshtml和/Views/Vendor/Create.cshtml-我尝试了@Html.Partial(“Vendor/Create.cshtml”)、@Html.Partial(“Vendor/Create”)、@Html.Partial(“Vendor/Create”)和@Html.Partial(“Create”、Website.Models.Vendor)(抱怨我传递了错误的类型)…这到底应该如何工作?可能
Html.Action()
现在是您最好的选择,因为它将评估您的操作并返回视图的内容。这只会呈现设置为.ascx的“视图”部分。但是我相信您想要的是
@Html.Partial(“~/Views/Vendor/\u Create.cshtml”)
如果您使用的是Razor,并且您的部分视图被称为
\u Create.cshtml
。这是一篇非常酷的文章。我现在不需要它,但将来我会需要它。非常感谢!是的。这与我现在正在做的非常接近(我实际上使用了.load())但是,出于所述的原因,我们希望从这一点转移到某种程度上的包含,@Html.Action可以做到这一点