Asp.NetMVCにおけるViewDataとViewBagの使い方
10275 ワード
MVCの開発では常にViewDataやViewBagを用いて値を伝える操作が行われていますが、よく使われているのでここでまとめてみて、後世の人に便利です.
バックグラウンドコード:
フロントコード:バックグラウンドはViewBagで値を保存し、フロントはViewBagで値を取ることもできるし、ViewDataで値を取ることもできる.ViewDataを使用して値を取る場合は、データを適切なタイプに変換する必要があります.ViewBagを使用して値を取得する場合は、データ型を変換する必要はありません.
バックグラウンドコード:
フロントコード:バックグラウンドはViewDataで値を保存し、フロントはViewBagで値を取ることもできるし、ViewDataで値を取ることもできる.ViewDataを使用して値を取る場合は、データを適切なタイプに変換する必要があります.ViewBagを使用して値を取得する場合は、データ型を変換する必要はありません.
ViewBagの定義:
ViewDataの定義:
定義により,ViewBagはViewDataの動的パッケージングであり,ViewDataに基づいてパッケージング処理を行ったことに相当する.
ViewDataはディクショナリタイプで、付与方式はディクショナリ方式で、key値で対応するvalueを読み出し、ViewData["myName"] ViewBagはダイナミックタイプで、使用時に直接属性で値を付与すればよい、ViewBag.myName ViewDataとViewBagは現在のActionでのみ有効であり、View と同等である. ViewDataとViewBagの値は相互にアクセスできます.注意:1、キーワードが有効なC#識別子である場合にのみ、ViewBagが機能します.たとえば、ViewData["Key With Space"]に値を格納すると、コンパイルできないため、ViewBagを使用してアクセスできません.2、動的値は拡張メソッドにパラメータとして渡すことができません.C#コンパイラは正しい拡張メソッドを選択するために、コンパイル時に各パラメータの本当のタイプを知らなければならないからです.いずれかのパラメータがダイナミックである場合、コンパイルは行われません.例:@Html.TextBox(「name」,ViewBag.Name)はコンパイルに失敗します.この行のコードをコンパイルするには、@Htmlという2つの方法があります.TextBox(“name”,(string)ViewBag.Name) 、@Html.TextBox(“name”,ViewData[“Name”])
未知のものに出会って焦らないでください、今毎日そんなに多くの新しい知識が世に出て、誰もすべての知識点を覚えることができなくて、心を静めて真剣に研究していつもマスターすることができる限り、必ず自分ができることを信じて、自分に制限を設けないでください.
一、ViewBagの使用方法
バックグラウンドコード:
public ActionResult Index()
{
Dictionary<string, string> address = new Dictionary<string, string>();
address.Add("Lng", "12.353535");
address.Add("Lat", "28.262626");
address.Add("Location", " ");
List<string> modules = new List<string>();
modules.Add("Admin module");
modules.Add("Recursive module");
modules.Add("Consistent module");
ViewBag.Name = " ";
ViewBag.Age = "18";
ViewBag.Phone = "18233199999";
ViewBag.Address = address;
ViewBag.Modules = modules;
return View();
}
フロントコード:バックグラウンドはViewBagで値を保存し、フロントはViewBagで値を取ることもできるし、ViewDataで値を取ることもできる.ViewDataを使用して値を取る場合は、データを適切なタイプに変換する必要があります.ViewBagを使用して値を取得する場合は、データ型を変換する必要はありません.
@ViewData["Name"]
@ViewData["Age"]
@ViewData["Phone"]
@{
Dictionary<string, string> dict = ViewData["Address"] as Dictionary<string, string>;
}
@if (dict != null)
{
@dict["Lng"]
@dict["Lat"]
@dict["Location"]
}
@{
List<string> list = ViewData["Modules"] as List<string>;
}
@if (list != null)
{
@list[0]
@list[1]
@list[2]
}
@ViewBag.Name
@ViewBag.Age
@ViewBag.Phone
@ViewBag.Address
@ViewBag.Address["Lng"]
@ViewBag.Address["Lat"]
@ViewBag.Address["Location"]
@ViewBag.Modules
@ViewBag.Modules[0]
@ViewBag.Modules[1]
@ViewBag.Modules[2]
二、Viewデータの使用方法
バックグラウンドコード:
public ActionResult Index()
{
Dictionary<string, string> address = new Dictionary<string, string>();
address.Add("Lng", "12.353535");
address.Add("Lat", "28.262626");
address.Add("Location", " ");
List<string> modules = new List<string>();
modules.Add("Admin module");
modules.Add("Recursive module");
modules.Add("Consistent module");
ViewData["Name"] = " ";
ViewData["Age"] = "18";
ViewData["Phone"] = "18233199999";
ViewData["Address"]=address;
ViewData["Modules"] = modules;
return View();
}
フロントコード:バックグラウンドはViewDataで値を保存し、フロントはViewBagで値を取ることもできるし、ViewDataで値を取ることもできる.ViewDataを使用して値を取る場合は、データを適切なタイプに変換する必要があります.ViewBagを使用して値を取得する場合は、データ型を変換する必要はありません.
@ViewData["Name"]
@ViewData["Age"]
@ViewData["Phone"]
@{
Dictionary<string, string> dict = ViewData["Address"] as Dictionary<string, string>;
}
@if (dict != null)
{
@dict["Lng"]
@dict["Lat"]
@dict["Location"]
}
@{
List<string> list = ViewData["Modules"] as List<string>;
}
@if (list != null)
{
@list[0]
@list[1]
@list[2]
}
@ViewBag.Name
@ViewBag.Age
@ViewBag.Phone
@ViewBag.Address
@ViewBag.Address["Lng"]
@ViewBag.Address["Lat"]
@ViewBag.Address["Location"]
@ViewBag.Modules
@ViewBag.Modules[0]
@ViewBag.Modules[1]
@ViewBag.Modules[2]
三、両者の定義
ViewBagの定義:
public dynamic ViewBag {
get {
if (_dynamicViewData == null) {
_dynamicViewData = new DynamicViewDataDictionary(() => ViewData);
}
return _dynamicViewData;
}
}
ViewDataの定義:
public ViewDataDictionary ViewData {
get {
if (_viewData == null) {
SetViewData(new ViewDataDictionary());
}
return _viewData;
}
set {
SetViewData(value);
}
}
定義により,ViewBagはViewDataの動的パッケージングであり,ViewDataに基づいてパッケージング処理を行ったことに相当する.
四、両者の違い
五、簡単にまとめる
未知のものに出会って焦らないでください、今毎日そんなに多くの新しい知識が世に出て、誰もすべての知識点を覚えることができなくて、心を静めて真剣に研究していつもマスターすることができる限り、必ず自分ができることを信じて、自分に制限を設けないでください.