[英]Render partial view from controller
我有一個控制器ItemsController
,該控制器具有實例方法GetRecent()
,該方法返回IQueryable<Item>
在我的應用程序的索引頁面中,我想使用ItemsController.GetRecent()
的結果來渲染_Recent.cshtml
部分視圖。
為此,我在Index.cshtml中編寫了以下內容
我已經將命名空間引用添加到〜/ Views / web.config中,因此無需寫出控制器的完整命名空間
@{
ViewBag.ItemsController = new ItemsController();
}
...
@Html.Partial("~/Views/Items/_Recent.cshtml",
((ItemsController)ViewBag.ItemsController).GetRecentItems())
我想到了直接傳遞new ItemsController().GetRecentItems()
或將GetRecentItems()
轉換為靜態方法的方法,但是我不確定這應該朝什么方向發展。
我想知道這是否是從控制器構建局部視圖的公認方法,如果不是,那么如何才能更有效地完成此工作?
第一個選項是Html.Action
或Html.RenderAction
(有什么區別? ) 。 這些是ASP.Net MVC框架的一部分 ,並提供了更完善的方法來實現與您的代碼示例類似的內容。
使用這種方法,您的視圖將調用適當的控制器,該控制器將獲取所有需要的數據,呈現部分視圖並返回它。
我傾向於回避使用這種方法,因為它看起來是倒退的,即,視圖“知道”了很多關於控制器和控制器結構的信息,並且正在積極地執行而不僅僅是消耗。
不過,這是一個合法的選擇。
您可以將“最近項”與主視圖的視圖模型一起傳遞。 這需要更多的建模工作,但是“純粹的”是因為您的視圖與控制器的耦合較少。 您的局部視圖無需更改。
您可以使用AJAX調用適當的控制器來渲染最近的項目,並讓該控制器返回局部視圖作為其結果。 這可能是最費力的工作,但是卻很優雅,因為某些工作會延遲到頁面的其余部分被渲染為止(可能允許延遲加載和/或縮短頁面加載時間)。
如果做得正確,這種方法還可以使關注點分離。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.