[英]What are the advantages of using a Base ViewModel class instead of @html.action to supply data to a partial view?
我有一個局部視圖,我想在具有不同視圖模型的多個視圖中進行渲染。 有問題的局部視圖作為布局頁面的一部分呈現:
@RenderPage("~/views/shared/_usernavbar.cshtml")
由於父頁面上的視圖模型每次都不相同,所以我不能只將需要的數據放入每個頁面的ViewModel中,然后在局部頁面中引用它。
我希望所有內容都保持強類型,因此一種可能的解決方案是創建一個基本視圖模型,將其應用於布局頁面並將其添加到將在不同頁面上使用的各種視圖模型。 然后,我可以在我的局部文件中引用基本視圖模型。 但是,我也可以只使用@ Html.Action渲染我的局部視圖,這將允許我在局部視圖中調用任何我喜歡的視圖模型。 使用@ Html.Action也將意味着我我的父視圖不需要附加視圖模型。
我想知道的是為什么在這種情況下為什么要在@ Html.Action上使用基本視圖模型? 由於兩者都需要單獨的服務器調用來生成我的部分數據,因此在基本視圖模型上使用@ Html.Action有什么不利之處嗎?
編輯-我將嘗試添加一個盡可能簡單的示例。
我有一個視圖,它調用以下ViewModel:
public class CourseViewModel
{
public int CourseID { get; set; }
public string Title { get; set; }
public string Country { get; set; }
}
我有一個部分,需要以下視圖模型(數據):
public class UserInfoViewModel
{
public int Stars { get; set; }
public int XP { get; set; }
public int Level { get; set; }
}
在父視圖中,第一個視圖模型稱為:
@model IEnumerable<OLTINT.ViewModels.CourseViewModel>
在布局頁面上按如下所示調用部分視圖:
@RenderPage("~/views/shared/_usernavbar.cshtml")
實際上,存在多個具有不同視圖模型的父視圖,在每個視圖中,我都希望使用其視圖模型中的數據來調用部分視圖。 我不能簡單地將這些數據添加到父視圖模型中,因為那樣我每次在局部視圖中調用的模型都必須不同。
我有兩種可能的解決方案,一種是使用上述的基本視圖模型,另一種是使用@ Html.Action調用部分解決方案。
閱讀評論后
正如Liam所說,Partial是首選on Action,因為您只需調用服務器一次。 如果調用動作,則兩次觸發服務器(2個請求)。 使用部分控制器會被擊中一次。
兩次擊中可能會導致更多的內存使用,更多的數據庫連接使用,低請求吞吐量(通常會使用更多的服務器資源)。
以您的示例為例,如果您需要為每個父模型檢索UserInfoViewModel
數據,則可能導致您的應用程序對數據庫進行N + 1查詢(如果您有“一些”以上的用戶,或者您沒有使用,這可能是一個問題。緩存)。
一種更常見的方法是僅使用1或2個查詢(一個用於Courses
,一個用於所有需要的UserInfo
)來檢索控制器中所需的全部數據,然后在控制器中聚合數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.