如何使用MVC3在视图中的某个位置的视图中插入局部视图?

时间:2012-02-17 15:40:25

标签: asp.net-mvc-3 pjax

我有一个MVC3应用程序,我正在实现pjax。除了在客户端没有主视图的地址加载时,除了在服务器端做什么之外,一切都运行良好。我的Controller代码看起来像

public virtual ActionResult Details(Guid id)
    {
        var partDetail = new PartDetail(id);
        var partialView = PartialView("Details", partDetail);
        if(Request.Headers["X-PJAX"]!= null)
        {
            return partialView;
        }

        var mainView =  View("Index");
        // Stick Partial View into main view at #update_panel?
        return mainView;
    }

如何将局部视图粘贴到主视图中,以便在#update_panel中插入局部视图?

1 个答案:

答案 0 :(得分:2)

好的,没有主要的重构,你可以做到以下几点。

(这假设您可以将index.cshtml上的@model设置为PartDetail()。)

在上面的控制器操作中,更改:

var mainView =  View("Index");

为:

var mainView =  View("Index", partDetail);

然后,在index.cshtml中添加以下内容:

<div id="update_panel">@RenderPartial("Details", Model)</div>

正如我所说,如果索引@model设置为PartDetail(),这只会起作用,否则,需要在索引视图中对模型进行一些重构才能包含此PartDetail()模型。此视图模型可能如下所示:

public class IndexViewModel
{
    ModelForIndex Index{get; set;}
    PartDetail Details{get; set;}
}

这个重构的viewmodel将作为@model IndexViewModel添加到index.cshtml中,并被partial部署为:

<div id="update_panel">@RenderPartial("Details", Model.Details)</div>

希望这是有道理的。