我目前在视图中有一个DIV,我在运行时(通过jQuery)使用另一个控制器的create视图。这是有效的,但当我看到页面时,div是空的(当然)。我这样做是因为我还没弄清楚如何在视图中嵌入视图。
我需要的是某种包含声明。我发现@RenderPage()但不会发出控制器方法调用。
答案 0 :(得分:3)
Html.Action将允许您在视图内部嵌套视图进行调用 - 通常只会在返回部分视图的方法上执行此操作,但这将在此处完成工作。
答案 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.ascx
或Views\<action>
文件夹中的Shared
。