Widoki ściśle typowane w MVC, Strongly Typed Views

Widoki typowane - przekazywanie typowanych danych do widoku.


Oprócz przekazywania danych do widoku za pomocą ViewBag, ViewData i TempData istnieje jeszcze jeden sposób umożliwiający automatyczne generowanie widoku dla kontrolera. Polega na przekazaniu danych do widoku, jako parametr. Dzięki takiemu sposobowi przekazania danych otrzymujemy widok ściśle typowany a więc znany jest typ danych przekazywanych do widoku. Umożliwia to automatyczne wygenerowanie widoku na podstawie przekazanego modelu danych oraz umożliwia podpowiedzi IntelliSense w pliku z widokiem.

Kod Akcji zwracającej dane jako parametr:

public ActionResult StronglyTyped()
{
    List<Dane> dane = new List<Dane>
        {
            new Dane{ Numer = 1, Imie = "Imie1", Nazwisko = "Nazwisko1"},
            new Dane{ Numer = 2, Imie = "Imie2", Nazwisko = "Nazwisko2"},
            new Dane{ Numer = 3, Imie = "Imie3", Nazwisko = "Nazwisko3"}
        };
 
return View(dane);
}
Aby dodać widok do akcji z kontrolera klikamy PPM (prawy przycisk myszy) i z menu kontekstowego wybieramy opcje Add View. Pojawi się okno (Rys. 2.38) wyboru klasy z modelem danych (Model class) oraz typem szablonu (Scaffold Template). Model class to klasa danych przekazywanych do widoku. Scaffold Template to rodzaj widoku, jaki chcemy stworzyć. W tym przypadku jest to lista.

Widoki ściśle typowane w MVC, strongly typed

Widok wygenerowany bez Strongly Typed:

@{
    ViewBag.Title = "StronglyTyped";
}
 
<h2>StronglyTyped</h2>

Widok wygenerowany jako Strongly Typed z szablonem List:

@model IEnumerable<Szukam.Controllers.Dane>
 
@{
    ViewBag.Title = "StronglyTyped";
}
 
<h2>StronglyTyped</h2>
 
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th><</th>
    </tr>
 
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
        </td>
    </tr>
}
 
</table>

Podpowiedzi IntelliSense dostępne w widoku typowanym (Rys. 2.39):

Podpowiedzi intellisense w widoku typowanym

Komentarze facebook (polub nasz profil na FB aby je zobaczyć):