MVC部分视图 - 为什么不调用我的控制器方法?

时间:2015-04-18 12:54:08

标签: asp.net-mvc

我一直在与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();
    }

加载父页面时,不会调用部分视图的此控制器方法。但是,显示一些图像的部分页面会进行渲染。我想知道为什么部分页面控制器方法没有被调用?

1 个答案:

答案 0 :(得分:5)

因为Html.Partial直接使用传递的模型呈现局部视图(可选)。我的意思是直接说它不是通过MVC生命周期,只是像渲染“模板”一样。

如果您想要运行子操作 贯穿整个生命周期(就像真实请求一样),请使用Html.Action方法。这样就可以调用控制器操作,包括路由系统,过滤器等。

应该考虑他应该使用哪种方法,因为Html.Action当然要慢很多(即使很可能瓶颈不在这里)。我过去常常这样思考:重复使用Html.Partial视图,重复使用业务逻辑和视图使用Html.Action