我有一个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中插入局部视图?
答案 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>
希望这是有道理的。