Je velice snadné cpát různá data rovnou do Hash kolekce ViewData. Řekněme že si chceme uložit titulek stránky. Jednoduše to lze udělat takto:
ViewData["Title"] = "Kontakty";
Sice je tento způsob velice přímočarý a jednoduchý, ale horší je to pak s údržbou kódu a také pokud pracuje v týmu více lidí, tak musí hledat někde v kódu klíče, které může použít.
Jak tento neduh odstranit? Receptem je použití Strongly Typed View a vlastní třídu pro přenos dat na view. Při psaní view je pak k dispozici intelli-sence, pro jednotlivé datové položky. Základem je vytvoření třídy např. ContactsViewData
public class ContactsViewData {
public string Title {get; set;}
private List _contacts = new List();
public List Contacts
{
get
{
if (_contacts == null) return new List();
return _contacts;
}
set
{
_contacts = value;
}
}
}
Všiměte si, že pro vlastnost Contacts je použit vzor
Null Object Pattern, čímž se můžeme snadno vyhnout psaní kontrol na null reference. V controlleru tak namísto
ViewData["Title"] = "Kontakty";
ViewData["Contacts"] = myContacts;
použijeme
var vd = new ContactsViewData { Title = "Contacts", Contacts = myContacts };
return View(vd);
Je to jednoduché výsledný kód ve vašich view je přehlednější a lépe udržovatelný.
PS: musím někde sehnat nějaký syntax highliter, který by fungoval v Bloggeru.... :)