1 Michal Augustýn ALWIL Software Microsoft Most Valuable Professional2 ASP.NET/IIS MVC v ASP.NET MVC Routing Controllery Views master pages kompozice...
Michal Augustýn www.augi.cz ALWIL Software Microsoft Most Valuable Professional
ASP.NET/IIS MVC v ASP.NET MVC Routing Controllery Views master pages kompozice
framework pro tvorbu webového rozhraní na platformě ASP.NET používá návrhový vzor MVC – podobně jako Nette, Django, SpringMVC, RoR, ZendFW, … nyní ve verzi 2, pracuje se na verzi 3 rozšiřitelný/upravitelný v mnoha směrech open-source (licence Ms-PL) zdrojáky dostupné na Codeplex.com
.NET Framework ~ Java C#, VB.NET, F#, IronPython, … Internet Information Services ~ Apache web.config ~ .htaccess module ~ module handler ~ handler ASP.NET je handler
IIS ASP.NET
WebForms
MVC
Požadavek
GET http://domena.cz/produkt/zobraz/10
IIS
moduly
ASP.NET [ISAPI filter]
handler
moduly
Výsledek
…
request 1
response
routing
5
Controller 2-3 Model
4 View
public class HomeController : Controller { public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); }
}
public ActionResult About() { return View(); }
defaultně se používá WebForms view-engine view == aspx stránka public ViewResult Show(int id)
{ }
Product p = BusinessLayer.Load(id); return View("Show", p);
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> Home Page
<%= Html.Encode(ViewData["Message"]) %>
<%= Html.Encode(ViewData.Model.Name) %>
určuje tvar url konfigurace v souboru Global.asax.cs pravidla se vyhodnocují v pořadí vložení mapuje zpracování url na kontroler a akční metodu umožňuje generování url výchozí nastavení: /Home/Product/20
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults );
třída odvozená od třídy Controller obsahuje akční metody (vrací ActionResult) 1. čte data z requestu 2. komunikuje s modelem 3. vybírá view a předává mu data k prezentaci Controller
Model
View
parametry requestu mapovány na vstupní parametry akční metody („deserializace“) public ActionResult Show(int id) { … }
Routovací parametry: controller, action, id POST parametry: product.Id, product.Name, product.Price public ActionResult Create(Product product) { … }
manuálně: [Try]UpdateModel vlastní konverze - IModelBinder
slouží k zápisu výsledku do HttpResponse public abstract class ActionResult { public abstract void ExecuteResult(ControllerContext context); }
standardní umístění ~/Views/{controller}/{view}.[aspx,ascx]
~/Views/Shared/{view}.[aspx,ascx] lze změnit (stejně jako vše)
partial views: UserControls (ascx) dědí z ViewUserControl
Html.RenderPartial(“MyPView”, model)
vyšší úroveň kompozice proběhne celý round-trip jde proti filozofii MVC, ale je užitečný Kdy použít RenderAction a kdy RenderPartial? Action – pro rendering nutná komunikace s modelem
aspektové rozšíření akčních metod lze aplikovat i na celé controllery [Authorize(Roles = "Admin")] [OutputCache(CacheProfile="TestProfile")] [HandleError(View="Error")] public ActionResult Test() { return new EmptyResult(); }
public interface IAuthorizationFilter { void OnAuthorization(AuthorizationContext filterContext); }
public interface IActionFilter { void OnActionExecuting(ActionExecutingContext filterContext); void OnActionExecuted(ActionExecutedContext filterContext); } public interface IResultFilter { void OnResultExecuting(ResultExecutingContext filterContext); void OnResultExecuted(ResultExecutedContext filterContext); } public interface IExceptionFilter { void OnException(ExceptionContext filterContext); }
jednoduché čistý kód nutí správně strukturovat plná kontrola nad html zezačátku vyžaduje více znalostí
složitější model RAD, komponentový vývoj odstínění od stavovosti http ViewState, PostBack
http://asp.net/mvc http://haacked.com – Phil Haack http://weblogs.asp.net/ScottGu - ScottGu http://forum.builder.cz – české fórum i o .NET http://www.aspnetmvc.cz – snad už brzy