10 maja 2010, 14:16 dario Komentarze (0)

Tytuł strony w aplikacji ASP.NET MVC

Aplikacja internetowa czy zwykła strona internetowa nie może obyć się bez określonego tytułu strony. Poniżej zamieszczam prosty przykład jak można selektywnie określać tytuł strony z poziomu kontrolera. Extension method Standardowe wyświetlenie treści strony odbywa się poprzez wywołanie metody View w metodzie akcji kontrolera.

public ActionResult Create()
{
    var model = new SomeModel();
    return View("Create", model);
}

Metoda View zwraca obiekt ViewResult. Zdefiniujmy zatem metodę rozszerzającą dla tego obiektu o metodę o dźwięcznej nazwie WithTitle. W tym celu dodajemy nową klasę do projektu i nazywamy ją ViewResultExtensions.

public static class ViewResultExtensions
{
    public static ViewResult WithTitle(this ViewResult vr, string title)
    {
        vr.ViewData["PageTitle"] = title;
        return vr;
    }
}

Dzięki temu możemy zmodyfikować naszą akcję Create następująco:Nasz model SomeModel pozostawiamy nietknięty, a mimo to mamy przekazany tytuł strony do widoku.

Wyświetlenie tytułu

Musimy jeszcze przekazany tytuł strony wyświetlić. Tutaj także posłużymy się metodą rozszerzoną, ale dla obiektu ViewMasterPage.

   1:  public static string PageTitle(this ViewMasterPage vp)
   2:  {
   3:      var title = vp.ViewData["PageTitle"] as string;
   4:      return title.Default("Brak parametru PageTitle");
   5:  }

Metoda Default została przeze mnie pokazana w poście prezentującym kilka przydatnych Extension Methods. Teraz w naszym pliku  szablonu możemy wstawić nasz tytuł. W sekcji head umieszczamy poniższą linijkę:

   1:  <%=Html.Title(this.PageTitle()) %>

Uzupełniając powyższy kawałek kodu, poniżej metoda rozszerzająca HtmlHelper o metodę Title:

   1:  public static string Title(this HtmlHelper h, string text)
   2:  {
   3:      TagBuilder tag = new TagBuilder("title");
   4:      tag.SetInnerText(text);
   5:      return tag.ToString(TagRenderMode.Normal);
   6:  }

Na zakończenie

Oczywiście jest to dosyć proste rozwiązanie, ale w sumie sprawdza się w praktyce. Na podobnej zasadzie można przekazywać do widoku inne dane, które są niezależne od aktualnego kontekstu. Dla przykładu pisząc aplikację typu "blog" przydadzą się dodatkowo takie meta dane jak: keyword, description, itd, itp. Można zdefiniować osobny obiekt, który będzie zawierał wszystkie potrzebne właściwości, aby nie wrzucać do kolekcji ViewData pojedynczych wartości.

Tagi:

Asp.net-mvc

Komentarze zablokowane

O autorze

Dariusz Gil - projektant i programista aplikacji internetowych budowanych na platformie Microsoft w technologii ASP.NET (C#) oraz MS SQL Server. Obecnie właściciel (narazie :)) jednoosobowej firmy Softio.

Filtruj używając APML