日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图

發布時間:2025/6/15 asp.net 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在ASP.NET MVC 模型中 選擇最好的方法將多個model(數據模型)傳遞到視圖

前提介紹

這個文章我們要討論,在ASP.NET MVC模型的項目中,怎么選擇一個最有效的方式來將多個數據模型(models)傳遞到視圖(view)中。我們已經在之前的文章“在一個視圖中使用多個模型”中,介紹了下面六個方式,“ViewModel,Partial View, Tuple, ViewData, ViewBag 和TempData”. 我們在特定的情境中進行選擇哪一種方法時,可能會有疑惑。在這篇文章中,我會分享一下我在這個問題上的發現。 如果你還沒有讀過之前的文章“在一個視圖中使用多個模型”,請先查看,因為這篇文章是建立之前那篇的基礎之上的。之前的文章中有詳細的討論我們應該如何將多個數據模型(models)傳遞到視圖,并且有ASP.NET MVC4應用的演示例子. 它會幫助你理解以下文章的內容。

?

方法的總體介紹

所有的在前一篇文章中介紹的六種方法都有各自的優點和不足。需要根據當在某個特定的情景中來選擇,而且這明顯也是一個爭論的話題。在做任何決定之前,我們需要將需求完全辨認清楚,然后,我們就只需要對比這些方法的優缺點來進行選擇。這篇文章中,我會整理這些方法從最常用的在ASP.NET MVC應用中的到最不常用的: 1,ViewModel 2,Partial View 3,ViewBag 4,ViewData 5,TempData 6,Tuple 注意:一個應用中可能會選擇用到多種方法,這是根據應用在某一個特定環境的需求的之上的。我們需要考慮每一個當前壞境中最合適的方法。 接下來,我們詳細討論這些方法,包括他們的使用和有關的優缺點。 ViewModel ViewModel 是一個允許我們在企業級應用程序中將多個models傳遞到視圖的一個模式。它能為每一個視圖的需要,將多個models(數據模型)集合起來或者將models的各種屬性準確包含在內。ViewModel 不應該有方法函數。它是一個某個視圖所需要的屬性的集合。 ? 典型使用: ViewModel是在企業級程序應用中,最廣泛使用的用來將多個model傳遞到視圖的方法。這是一個當你需要在視圖中打印或使用多個數據模型的屬性時可以使用的標準的方式(也適用在Partial View中)。 優點:
  • ViewModel 允許我們將多個類型的數據模型(models)當成一個類型數據模型來加載一個視圖。
  • 很棒的智能支持和編譯階段的在視圖頁面的錯誤檢測功能。
  • 使用ViewModel的話,視圖只能獲得它所需要的數據,這也對安全問題有好處。核心的數據模型不會暴露給用戶。
  • 如果在核心的數據模型中有什么改變,你不需要在視圖的代碼中再修改,你只需要修改系那個管的ViewModel。
  • 用這個方式,ViewModel 促進了應用中的松耦合。
缺點: ? ViewModel 在數據模型(Models)和視圖(Views)之間又增加了一層,所以它就增加了一點復雜度。所以對于一些小的或者演示例子的應用,我們可以使用Tuple 或者別的簡單的方式。 Partial View 一個Partial View 是一個你可以包含在一個父視圖的子視圖。在很多例子中,我們遇到這樣一個情景,幾個視圖共享/共有一個演示部分,這個部分就是一個分開的partial view 并且嵌入用在別的視圖中。 典型使用: 這個方法如此頻繁地和ViewModel一起使用在企業級應用程序中。它是使用在你需要在多于一個視圖頁面中分享相同的一段代碼(Razor Or HTML)時. 優點:
  • 提高了視圖代碼在程序中的重用性。
  • 對于單一頁面(Single Page Application)應用非常有用。
  • 你也可以在Partial View中使用ViewModel。
  • 使用Partial View,你能夠使用AJAX來更新一部分頁面而不刷新整個頁面。
缺點:
  • 如果使用很多的話,視圖變成了一個很多Partial View的集合,所以有時候可讀性會差一點。
ViewBag ViewBag 是一個來自ControllerBase類的動態屬性。ViewBag 是以name/value的形式被內部存儲在dictionary中。它使用新的才c# 4.0的動態特性,所以ViewBag不用為數據類型做類型轉換。 典型使用: ? ASP.NET MVC 3.0和之后的版本中,當一個成員不能直接關聯到視圖并且不適合使用Model時,應該使用ViewBag(一個ViewBag應該是一個封裝了業務數據和行為的類)。典型的例子是使用ViewBag.Title設置頁面的標題, 或者在視圖中顯示信息ViewBag.Message等。 優點: ?
  • 使用ViewBag, 我們可以很省事的把數據從控制器發送到視圖。
  • ViewBag的語法比ViewData好用,不需要使用鍵值Key。
  • ViewBag 不需要做數據類型的類型轉換。
缺點:
  • 它只用于單方向的傳遞數據,即從控制器到視圖。
  • ViewBag的值只能在當前的請求中有效,它的值不能在多個請求之間之久,意味著如果有Redirection(重導),ViewBag的值變成空。
  • 過度使用ViewBag當然是一個不好的做法。不推薦使用在企業級的應用程序中,盡管有時候它被用在傳遞少量的數據。
  • 沒有智能支持和編譯階段檢測錯誤的功能。
ViewData ViewData是定義在ControllerBase類中的一個屬性變量(類型為ViewDataDictionary 類)。存在ViewData中得值需要進行類型轉換,轉到他們在視圖中的類型。在ViewData中存的值需要使用鍵值Key才能訪問。 典型使用: ? 在ASP.NET MVC版本1和2中,ViewData是和ViewBag的用途一樣的。微軟為了更新的版本支持ViewData,但是ViewBag提供了更多好處,在最新的版本MVC中最好不使用ViewData。 優點: ?
  • 使用ViewData我們能使用內置的屬性伴隨著鍵值Key,把數據從控制器傳遞到視圖中。
缺點: ?
  • 只是應用于單方向的數據傳遞,也就是從控制器到視圖。
  • ViewData的值只能在當前的請求中有效,它的值不能在多個請求之間之久,意味著如果有Redirection(重導),ViewData的值變成空。
  • 過度使用ViewData當然是一個不好的做法。不推薦使用在企業級的應用程序中,盡管有時候它被用在傳遞少量的數據。
  • 語法要使用鍵值Key,使得它不如ViewBag的可讀性,ViewBag使用屬性類型的語法。
  • 沒有智能支持和編譯階段檢測錯誤的功能。
TempData TempData是定義在ControllerBase類中的一個屬性變量,它的類型是TempDataDictionary類。在TempData中存儲的值需要進行類型轉換為視圖中的所需類型,并且該值是通過鍵值Key進行獲取。它跟ViewData很相似,但是不同的是,它允許我們在一個控制器中接受數據從另一控制器,并從一個行為函數到另一個行為函數(Action)。因為它是通過在內部使用會話變量實現的,所以它有這樣的功能。 典型使用: 無論你什么時候需要保持一些信息直到一個接著的后來的請求,使用TempData都是很好的方法。它應該在你需要保持例如驗證信息,錯誤信息,或者一些小的不包含敏感數據信息的時候使用。因為它能保證會話來傳遞變量,所以你不應該把敏感的信息存放在TempData。 優點: ?
  • 你可以從一個控制器傳遞數據到另一個控制器或者從一個Action傳遞到另一個Action。
缺點: ?
  • 可能會如上面討論的那樣,引起一些安全隱患。
  • 它需要進行類型轉換和檢測Null值來避免錯誤。
  • Visual Studio中沒有智能支持。
Tuple Tuple 是一個在.NET Framework 4.0中出現的一個新的類。它是一個有序的序列,不可更改的,大小固定的各種不同(允許我們進行對多個數據類型進行組合)對象的集合。 典型使用: 它可能會對小的或者演示用例的程序合適。Tuple是一個C#語言的新特性,在特定的場景中使用,但是如果你在MVC中使用,你應該只在你需要建立ViewModel的時候使用。 優點:
  • 它提供了一個可以整合多個類型的而不需要新創建類的方式(ViewModel)。
  • 它是一個對ViewModel的快速補救措施,而且需要更少的代碼編寫。
缺點: ?
  • Tuple 是大小固定的最多8個項目。
  • 值被以item1, item2...形式記錄,很難識從代碼中識別變量。
  • Visual Studio中沒有很棒的智能支持。
總結 這個文章中,我們學習了如何選擇最好的來傳遞多個數據模型models到視圖的方法,希望這篇文章能幫助你去理解和在你自己的應用中有效的使用這些概念。非常歡迎你的在這方面的任何疑問和評論。謝謝。 原文地址http://www.bieryun.com/1907.html

總結

以上是生活随笔為你收集整理的在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。