ASP.NET MVCにおけるviewData、viewBagとtemplateDataの違い

2886 ワード

MVC 3からはビューデータがViewBag属性でアクセスでき、MVC 2ではViewDataが使用される.MVC 3にはViewDataの使用が残っている.ViewBagはダイナミックタイプ(dynamic)、ViewDataはワードの典型的な(Dictionary).viewDataはviewBagよりも速く、viewPageでデータをクエリーするにはデータ型を変換する必要がありますが、viewBagではデータ変換は必要ありません.TempDataは、ビューにデータを渡すためにも使用できます.ただし、ViewDataとViewBagのライフサイクルはViewと同じであり、現在のViewにのみ役立ちます.一方、TempDataは、webformのSeesionのように、異なるActionで値を伝えることができます.
1、viewData.
ControllerでViewDataを使用するには:
<span style="white-space:pre">	</span>    ViewData["Title"] = " Using ViewData";

            List<string> modules = new List<string>();
            modules.Add("Admin module");
            modules.Add("ShoppingCart module");
            modules.Add("CMS module");
            ViewData["modules"] = modules;
            return View();
UsingViewData Viewに対応するcshtml:
<h1>@ViewData["Title"]</h1>
 <div> 
     Project Details:<br />
     <div>
       module List  :
       <ul id="modulelist">
          @foreach ( var module in ViewData["modules"] as List<string> )
          {          
            <li>
                @module
            </li>
          }
        </ul>        
     </div>
 </div>
皆さんは、ここでタイプ変換が必要であることに気づきました.
2、viewBag.
ControllerでviewBagを使用するには:
<span style="white-space:pre">	</span>    ViewBag.Title = " Using ViewBag";
           
            List<string> modules = new List<string>();
            modules.Add("Admin module");
            modules.Add("ShoppingCart module");
            modules.Add("CMS module");
            ViewBag.modules = modules;
            return View();           
ViewUsingViewBagのcshtmlに対応するViewBag:
<h1>@ViewBag.Title</h1>
 <div>
     Project Details:<br />
     <div>
       module List  :
       <ul id="modulelist">
      @foreach ( var module in ViewBag.modules )
      {          
        <li>
            @module
        </li>
      }
     </ul>
   </div>
 </div>
3、TempData.
ControllerでTempDataを使用するには:
<span style="white-space:pre">	</span>TempData["abc"] = "this is tempdata";
        return View();
ビューでTempDataを使用するには、次の手順に従います.
@TempData["abc"]
ここでは、TempDataの値が一度取った後に自動的に削除されることがわかります.このとき、私はページをリフレッシュすると、TempData[「abc」]がNullになります.
まとめ:ViewBagは本質的にViewDataであり、層Dynamic制御が多くなっただけであるが、ViewDataはタイプ変換が必要である.TempDataとViewBag、ViewDataの違いはライフサイクルが異なり、ViewData、ViewBagのライフサイクルはviewと同じで、TempDataは異なるActionで値を伝えることができますが、彼が一度呼び出す値は削除されます.