ASP NET MVC Web Development Controllers Views www
ASP. NET MVC Web Development Controllers & Views | www. starwave. nl/mq
Vandaag - Wat we hebben geleerd in hoofdstuk 2 (Controllers) En hoofdstuk 3 (Views) Eventuele vragen over deze hoofdstukken - Keuze voor ‘project’
Controllers public class Home. Controller : Controller { public Action. Result Index() { return View(); } } Deze controller reageert op een request naar http: //www. mijnsite. nl en geeft /views/index. cshtml terug
Parameters public string Check(string name) { if(name == Robert) return “Wajow”; return “Probeer een andere naam”; } /Check? name=Robert De parameter in de URL wordt automatisch omgezet naar de parameter van de method, zolang de naam hetzelfde is.
Int id public string Details(int id) { string message = “Het ID is " + id; return message; } Nu is het voldoende om naar /Details/24 te gaan. 24 zal in de id parameter worden geplaatst, hoe kan dit?
Route. Config public static void Register. Routes(Route. Collection routes) { routes. Ignore. Route("{resource}. axd/{*path. Info}"); routes. Map. Route( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = Url. Parameter. Optional } ); } Je ziet dat id als optionele parameter al in de standaard route configuratie staat!
Http. Utility. Html. Encode public string Welcome(string name, int num. Times = 1) { return Http. Utility. Html. Encode("Hello " + name + ", Num. Times is: " + num. Times); } Waarom Html. Encode gebruiken? Om te voorkomen dat een kwaadwillende ongewenste dingen in de parameters zet, zoals javascript, en jij dit doorgeeft aan de pagina of database. Html. Encode verandert bijv. <script> in < script> (wat er in de browser gewoon uitziet als <script>)
Views zijn eigenlijk niet veel meer dan HTML templates. + een beetje programmeercode. Views benader je in principe nooit direct /Views/Home/Index. cshtml is niet hoe je de homepage van je site bekijkt!
Views De code is Razor. Lijkt op C#, maar dan geïntegreerd met HTML (daarom ook. cshtml). Razor code begint altijd met @ <h 2>Welcome</h 2> <ul> @for (int i = 0; i < View. Bag. Num. Times; i++) { <li>@View. Bag. Message</li> } </ul>
3 soorten Views Layout view View Partial View Master page? Web Form? User Control?
3 soorten views We gaan het vandaag alleen hebben over gewone views. Layout views behoeven ook niet veel uitleg. Partial views zijn wat interessanter (en ingewikkelder)…maar een onderwerp voor later.
Views returnen Standaard wordt de view gebruikt met dezelfde naam als de method. Dus in dit geval Index. cshtml. public Action. Result Index() { return View(); } Maar je kunt ook een andere view gebruiken: Not. Index. cshtml public Action. Result Index() { return View("Not. Index"); }
Strongly typed views Je kunt bovenaan de view opgeven welk type (class) je als model gebruikt in die view: @model IEnumerable<Mvc. Music. Store. Models. Album> <ul> @foreach (Album p in Model) { <li>@p. Title</li> } </ul>
Strongly typed views Je moet het model object dan wel meegeven aan de view: public Action. Result Albums. By. Genre(int id) { List<Album> albums = db. Get. Albums. By. Genre. Id(id); return View(albums); }
Strongly typed views public Action. Result Albums. By. Genre(int id) { List<Album> albums = db. Get. Albums. By. Genre. Id(id); return View(albums); } Controller @model IEnumerable<Mvc. Music. Store. Models. Album> <ul> @foreach (Album p in Model) { <li>@p. Title</li> } </ul> View
Snel een view toevoegen Je kunt vanuit de controller code snel een view toevoegen:
Razor is makkelijk Razor is op de een of andere manier heel intuïtief voor wie C# en HTML een beetje kent. Het is slim genoeg om goed te bepalen wat C# code is, en wat HTML is:
Explicit expressions Als je zeker wilt weten dat alles na de @ als C# wordt uitgevoerd, een explicit expression, gebruik je haakjes ( ) Hier is het nodig om expliciet aan te geven wat door Razor moet worden verwerkt en wat niet. Omdat Razor anders gaat zoeken naar de property p. Category. Name. jpg die helemaal niet bestaat.
Razor Syntax Specifieke details over de razor syntax kan je nalezen in het boek. @ @( ) @{ } < code expression < explicit code expression < code block @: <text> </text> < plain text (hetzelfde als @: ) @* *@ < comment
Zelf views schrijven We gaan natuurlijk niet al onze views scaffolden. Soms wil je iets wat niet eens lijkt op de standaard views. Hiervoor is het belangrijk dat je de HTML helper methods kent, maar die komen pas in hoofdstuk 5 aan bod. <div class="form-group"> @Html. Label. For(model => model. Price, new { @class = "controllabel col-md-2" }) <div class="col-md-10"> @Html. Editor. For(model => model. Price) @Html. Validation. Message. For(model => model. Price) </div>
School/huiswerk Voor de volgende les: - Heb je hoofdstuk 3 afgerond Vragen?
- Slides: 21