我一直在与MVC合作很长一段时间,但是,直到现在,我从未使用过部分视图。所以我有点不清楚发生了什么。我在“父”页面中有这个HTML:
@model MyApp.Entities.HomePage
<div class="row">
<div class="col-xs-6">
<div class="input-group">
<input type="text" id="searchTags" class="form-control" placeholder="Search for..." autofocus="autofocus">
</div>
</div>
</div>
<div>
@Html.Partial("_itemList", Model, new ViewDataDictionary {{"searchTag", "Heath"}});
</div>
如您所见,主页包含_itemList局部视图。在我的控制器代码中,我有这个:
public ActionResult _itemList(string searchTag)
{
return this.PartialView();
}
加载父页面时,不会调用部分视图的此控制器方法。但是,显示一些图像的部分页面会进行渲染。我想知道为什么部分页面控制器方法没有被调用?
答案 0 :(得分:5)
因为Html.Partial
直接使用传递的模型呈现局部视图(可选)。我的意思是直接说它不是通过MVC生命周期,只是像渲染“模板”一样。
如果您想要运行子操作, 贯穿整个生命周期(就像真实请求一样),请使用Html.Action
方法。这样就可以调用控制器操作,包括路由系统,过滤器等。
应该考虑他应该使用哪种方法,因为Html.Action当然要慢很多(即使很可能瓶颈不在这里)。我过去常常这样思考:重复使用Html.Partial
视图,重复使用业务逻辑和视图使用Html.Action
。