ååããã©ãããã©ãŒã ã§éçã³ã³ãã³ããæäœããããã®æ°ããã¢ãããŒãã«ã€ããŠèª¬æããŸããã ã³ã¡ã³ãã§ã¯ãASP.NETã䜿çšãå§ããŠãããã¯ã«é£ã³èŸŒã¿å§ããã°ããã®Webéçºè åãã®åºæ¬äºé ã«ã€ããŠã次ã®åé¡ã§è©±ãææ¡ããããŸããã ç§ãã¡ã¯ããªãã«è³ãåŸãããã®åé¡ã®è³æã§ã Andrey Veselov ïŒ StealthDogg ïŒããæäŸããŸããããã¯Webéçºã®å°é家ã§ãããASP.NETããã³Microsoft MVPã«é¢ããå€ãã®èšäºã®èè ã§ãã
ASP.NET5ã®åºæ¬ïŒã³ã³ãããŒã©ãŒããã¥ãŒãã¢ãã«ïŒã®çŽ¹ä»ãã芧ãã ããã
ã泚æ ãã®èšäºã¯ãASP.NET5 Beta5ãæèŒããVisual Studio 2015ã®æçµããŒãžã§ã³ã«é¢é£ããŠããŸãã ãªãªãŒã¹ããŒãã䜿çšããŠãASP.NETã®æ°ããããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããŸãã
ã³ã³ãããŒã©ãŒãæäœãã
å°ããªWebã¢ããªã±ãŒã·ã§ã³ã®äŸã䜿çšããŠãã³ã³ãããŒã©ãŒã®æäœãšMVCãã³ãã¬ãŒãã®ã¢ã¯ã·ã§ã³ãèŠãŠã¿ãŸãããã
ã¢ããã€ã¹ïŒ è©ŠããŠã¿ãããGitHub https://github.com/vyunev/AspColumnControllerDemoãããœãŒã¹ã³ãŒããããŠã³ããŒãããŠãã ãã ã
ãããžã§ã¯ããäœæãã
ãããè¡ãã«ã¯ãControllerDemoãããžã§ã¯ããäœæããŸãïŒå³1ïŒã
å³1-ASPãNET5 Webã¢ããªã±ãŒã·ã§ã³ãããžã§ã¯ãã®äœæ
ãããžã§ã¯ãèšå®ã§ãASP.NET 5 Templatesã»ã¯ã·ã§ã³ãã空ã®ãã³ãã¬ãŒããéžæããŸãïŒå³2ïŒã
å³2-Webã¢ããªã±ãŒã·ã§ã³ãã³ãã¬ãŒãã®éžæ
ãããžã§ã¯ããäœæãããšã次ã®èŠçŽ ããœãªã¥ãŒã·ã§ã³ãšã¯ã¹ãããŒã©ãŒã«åæ ãããŸãïŒå³3ïŒã
å³3 -ãã³ãã¬ãŒãæ§é
次ã«ãASP.NET MVC 6ããããžã§ã¯ãã«æ¥ç¶ããå¿ èŠããããŸãã
1. project.jsonãã¡ã€ã«ã§ãMicrosoft.AspNet.Mvcã©ã€ãã©ãªãžã®äŸåé¢ä¿ãæå®ããŸãã
"dependencies": { "Microsoft.AspNet.Server.IIS": "1.0.0-beta5", "Microsoft.AspNet.Server.WebListener": "1.0.0-beta5", "Microsoft.AspNet.Mvc": "6.0.0-beta5" },
2.次ã«ãèŠæ±ãåŠçããŠã«ãŒãã£ã³ã°ãæ§æããã«ã¯ãOwinãã€ãã©ã€ã³ã«ASP.NET MVC 6ãå«ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãStartup.csãã¡ã€ã«ã«æ¬¡ã®è¡ãè¿œå ããŸãã
public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddMvc(); } public void Configure(IApplicationBuilder app) { app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller}/{action}/{id?}", defaults: new { controller = "Home", action = "Index" }); }); } }
ãããžã§ã¯ããæºåãããã³ã³ãããŒã©ãŒãšã¢ã¯ã·ã§ã³ã®äœæãéå§ã§ããŸãã
ã³ã³ãããŒã©ãŒãšã¢ã¯ã·ã§ã³
ååãšããŠãã³ã³ãããŒã©ãŒã¯ã³ã³ãããŒã©ãŒãšåŒã°ããç¹å¥ãªãã©ã«ããŒã«é 眮ãããŸãã ASP.NET MVC 6ã§ã¯ãä»ã®ãã©ã«ããŒã䜿çšã§ããŸãã åºæ¬ã¯ã©ã¹ã§ããããæ¢ããŠããŸãã ãã ãããã®äŸã§ã¯ããã¡ã€ã«ã®å Žæã®ã¯ã©ã·ãã¯ããŒãžã§ã³ã«çŠç¹ãåœãŠãŸãã ã³ã³ããã¹ãã¡ãã¥ãŒã䜿çšããŠãControllersãã©ã«ããŒïŒãè¿œå >æ°ãããã©ã«ããŒãïŒãäœæãããã®äžã«æ°ããHomeControllerã¯ã©ã¹ãäœæããŸãïŒãè¿œå >æ°ããã¢ã€ãã ...ãããã³ãã¯ã©ã¹ããéžæããŸãïŒã
ã泚æ ã³ã³ãããŒã©ãŒã¯ã©ã¹ã®ååã¯ãåžžã«ã³ã³ãããŒã©ãŒã®ååïŒãã®å Žåã¯ãHomeãïŒãšãControllerãã®æ«å°Ÿã§æ§æãããŸãã
ãã³ãã å°æ¥ãã³ã³ãããŒã©ãŒãäœæããããã«ãæ¢è£œã®MVCã³ã³ãããŒã©ãŒã¯ã©ã¹ãã³ãã¬ãŒãã䜿çšã§ããŸãã ããããä»ãå匷ããããã«ãéåžžã®ç©ºã®ã¯ã©ã¹ãäœæããŸãã
ãã¹ãŠã®Webã¢ããªã±ãŒã·ã§ã³ã³ã³ãããŒã©ãŒã®åºæ¬ã¯ã©ã¹ã¯Controllerã§ãã ãããã£ãŠãäœæãããã¯ã©ã¹ãç¶æ¿ããŸãã
public class HomeController : Controller { }
Controllerã¯ã©ã¹ã¯ã³ã³ãããŒã©ãŒã®ããŒã«ãŒã§ããã ãã§ãªããåä¿¡ããèŠæ±ãåŠçããŠå¿çãçæããããã®åºæ¬çãªæ©èœãæäŸããŸãã çŸæç¹ã§ã¯ã次ã®ãããªããããã£ããã£ã³ã»ã«ãã䟡å€ããããŸãã
- ViewBagããã³ViewData-ä»»æã®ããŒã¿ããã¥ãŒã«è»¢éããããã«èšèšãããŠããŸãã
- ãªã¯ãšã¹ã-å ã®ãªã¯ãšã¹ãã®ããŒã¿ãå«ãŸããŸãã
- å¿ç-ã¯ã©ã€ã¢ã³ãã®å¿çãäœæã§ããŸãã
ããã«ãããã€ãã®äŸ¿å©ãªã¡ãœãããæäŸããŸãããããã«ã€ããŠã¯åŸã§èª¬æããŸãã
ãã®ã¢ã¯ã·ã§ã³ã¯ãã³ã³ãããŒã©ãŒã§ã®èŠæ±ã®çŽæ¥åŠçãæ åœãã次ã®éšåãåºå¥ã§ããŸãã
- å±æ§[HttpGet]ã[HttpPut]ã[HttpPost]ã[HttpPatch]ã[HttpDelete]ã䜿çšããŠç¹å®ã®èŠæ±ã¿ã€ããæå®ããŸãã [HttpMethod]ã䜿çšããŠè€æ°ã®ã¿ã€ããæå®ããããšãã§ããŸãã ãã®å Žåãä»ã®ã¿ã€ãã®ãªã¯ãšã¹ãã¯ç¡èŠãããŸãã å±æ§ãæ¬ èœããŠããå Žåããã¹ãŠã®èŠæ±ã«å¯ŸããŠã¢ã¯ã·ã§ã³ãåŒã³åºãããŸãã
- ã¢ã¯ã·ã§ã³ã®çµæ -ãã®ã¿ã€ãã¯IActionResultã®å®è£
ã§ãã ãã¹ãŠã®ã¢ã¯ã·ã§ã³ã¯ãæå®ãããã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ãå¿
èŠããããŸãã å®éã圌ã¯ã¯ã©ã€ã¢ã³ãã«éä¿¡ãããå¿çãçæãã責任ããããŸãã HTMLããŒãžããã¡ã€ã«ããªãã€ã¬ã¯ãããšã©ãŒã³ãŒããªã©ãèããããŸãã
åºæ¬ã¯ã©ã¹Controllerã«ã¯ãã»ãšãã©ã®æšæºçãªå Žåã«é©ããã¡ãœãããå«ãŸããŠããŸãã
- ãã¥ãŒïŒïŒ-ãã¥ãŒã䜿çšããŠå¿çïŒhtmlããŒãžïŒãäœæããŸãã
- ã³ã³ãã³ãïŒïŒ-ã¯ã©ã€ã¢ã³ãã«ä»»æã®ããã¹ãæååãéä¿¡ããããšãç®çãšããŠããŸããããšãã°ãCSSãŸãã¯JavaScriptãçæã§ããŸãã
- ãã¡ã€ã«ïŒïŒ-ãã¡ã€ã«ãã¯ã©ã€ã¢ã³ãã«è¿ãããšãã§ããŸãã
- JsonïŒïŒ-ãªããžã§ã¯ããJSON圢åŒã«å€æããã¯ã©ã€ã¢ã³ãã«è¿ããŸãã
- RedirectïŒïŒãRedirectPermanentïŒïŒãRedirectToActionïŒïŒãRedirectToRouteïŒïŒ-ã¯ã©ã€ã¢ã³ããæ°ããã¢ãã¬ã¹ã«ãªãã€ã¬ã¯ãããŸãã
- åŒã³åºãããã¢ã¯ã·ã§ã³ã®åå ã ããã©ã«ãã§ã¯ãã¯ãšãªæååã¯æ¬¡ã®åœ¢åŒã§ãããšèŠãªãããŸãïŒ www.site.com/<Controller>/ <Action>
- ã¢ã¯ã·ã§ã³ã¡ãœããã«ã¯ãã©ã¡ãŒã¿ããããŸãã ASP.NET MVCã¯ãã¯ãšãªæååãããããã®å€ãååŸããããšããŸãã ã¢ã¯ã·ã§ã³ãšãªã¯ãšã¹ãã®ãã©ã¡ãŒã¿ã®æ¯èŒã¯ååã§å®è¡ãããŸãã
- ãããŠæåŸã«ãå¿ èŠãªããŒã¿ãæºåãããçµæãè¿ãããã¡ãœããã®æ¬äœã
æåã®ã¢ã¯ã·ã§ã³ãè¿œå ããŸã-ã€ã³ããã¯ã¹ïŒ
public class HomeController : Controller { // GET: /Home/ public IActionResult Index() { return this.Content("Hello ASP.NET MVC 6."); } }
ããã§Webã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããšãæå®ãããæååã¯ãHello ASP.NET MVC 6ãã§ãã ãã©ãŠã¶ã«è¡šç€ºãããŸãã
æ£ç¢ºã«äœãèµ·ãã£ãã®ãèŠãŠã¿ãŸãããïŒ
- ãã©ãŠã¶ã¯ã httpïŒ// localhostïŒ[port] /ãšãã圢åŒã®ãµã€ãã«ãªã¯ãšã¹ããéä¿¡ããŸãã
*泚ïŒãããã°ã¢ãŒãã§èµ·åããããŒãã¯ãç¡æã®ãããžã§ã¯ããããããžã§ã¯ããäœæãããšãã«èªåçã«éžæãããŸãã
- ã³ã³ãããŒã©ãŒãã¢ã¯ã·ã§ã³ãæ瀺çã«æå®ãããŠããªããããASP.NET MVCã«ãŒãã£ã³ã°ã¯ããã©ã«ããªãã·ã§ã³ã®ããŒã ãšã€ã³ããã¯ã¹ã䜿çšããŸãã
- HomeControllerã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæãããŸããã
- 圌ã¯ã¢ã¯ã·ã§ã³ã€ã³ããã¯ã¹ãèŠã€ããŠå®è¡ããŸããã
- IndexïŒïŒã¡ãœããã¯ContentïŒïŒã¡ãœãããåŒã³åºããŠãæå®ãããæååã§æ§æãããå¿çãçæããŸããã
- ASP.NET MVCãšã³ãžã³ãå¿çãåä¿¡ããã¯ã©ã€ã¢ã³ããã©ãŠã¶ãŒã«è»¢éããŸããã
- ãã©ãŠã¶ãŒã¯ãå¿çãšããŠåãåã£ãè¡ã衚瀺ããŸããã
èŠæ±ãããã³ã³ãããŒã©ãŒãŸãã¯ã¢ã¯ã·ã§ã³ãèŠã€ãããªãå Žåãå¿çã404. Page not foundããéä¿¡ãããŸãã
å°ãè€éã«ããŠãã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ãŒãšãã1ã€ã®ã¢ã¯ã·ã§ã³ãäœæããŸãããã
public class HomeController : Controller { private readonly string _time; public HomeController() { this._time = DateTime.Now.ToString("G"); } // GET: /Home/ public IActionResult Index() { return this.Content("Hello ASP.NET MVC 6"); } // GET: /Home/Echo/ public IActionResult Echo(string message) { return this.Content($"{this._time} > {message}"); } }
ããã§ãã³ã³ãããŒã©ãŒã®äœææéãšãªã¯ãšã¹ãã§æž¡ãããæååãåçãšããŠè¿ãããŸãã ããã«ããããªã¯ãšã¹ãããšã«HomeControllerã®æ°ããã€ã³ã¹ã¿ã³ã¹ãäœæãããŸãã
äœæãããã¢ã¯ã·ã§ã³ãåŒã³åºãã«ã¯ãã³ã³ãããŒã©ãŒã®ååãšã¢ã¯ã·ã§ã³èªäœãå«ããã¹ããã©ãå¿ èŠããããŸãã Webã¢ããªã±ãŒã·ã§ã³ãèµ·åãããã©ãŠã¶ãŒã«æ¬¡ã®ã¢ãã¬ã¹ãå ¥åããŸãã
httpïŒ// localhostïŒ[port] / Home / EchoïŒmessage = Hello
éåææ§ã¯ãã
ASP.NET MVC 6ã䜿çšããŠéåæã¡ãœãããç°¡åã«äœæã§ããããšãèŠãŠã¿ãŸãããã ãšã³ãŒã®ã¢ã¯ã·ã§ã³ãããçŽããŸãã éåæã¡ãœããã®åŒã³åºããã·ãã¥ã¬ãŒãããã«ã¯ãTask.DelayïŒïŒã䜿çšããŸãã
public async Task<IActionResult> Echo(string message) { await Task.Delay(100); return this.Content($"{this._time} > {message}"); }
å¿ èŠãªã®ã¯ãIActionResultã®çµæã®åãTask <IActionResult>ã«çœ®ãæããéåæ修食åãè¿œå ããããšã ãã§ããã ãã®ãããªã¢ã¯ã·ã§ã³ã§ã¯ãããšãã°ãããŸããŸãªããŒã¿ãœãŒã¹ãŸãã¯ãµãŒãã¹ã«ã¢ã¯ã»ã¹ããããã«éåæã¡ãœããåŒã³åºãã䜿çšã§ããŸãã
ã¡ãã£ãšããç·Žç¿
æåŸã«ã2ã€ã®å°ããªå®çšçãªã¿ã¹ã¯ïŒ
- ãã©ã¡ãŒã¿ãŒã®å€ã衚瀺ããããPOSTã¿ã€ãã®èŠæ±ã®ã¿ã«éä¿¡ãããã¢ã¯ã·ã§ã³ãäœæããŸãã
ãã³ãã ãªã¯ãšã¹ããäœæããã«ã¯ããã©ãŒã ã§éåžžã®HTMLããŒãžã䜿çšã§ããŸãã ãã®ãã¡ã€ã«ãæ¢åã®wwwrootãã©ã«ããŒã«é 眮ããŸããããã¯ããµã€ãäžã®éçã³ã³ãã³ãïŒhtmlããŒãžããã¡ã€ã«ãªã©ïŒã察象ãšããŠããŸãã
- Getãªã¯ãšã¹ãã«ã®ã¿å¿çããã¢ã¯ã·ã§ã³ãäœæãã以äžãå®è¡ããŸãã
- ãã¡ã€ã«ãè¿ããŸãã
- Json圢åŒã®ãªããžã§ã¯ããè¿ããŸãïŒç°¡åã«ããããã«ãå¿åã¯ã©ã¹ã䜿çšã§ããŸãïŒã
- å¥ã®ããŒãžã«ãªãã€ã¬ã¯ãããŸãã
ãããŠããã¹ãŠã®ãœãªã¥ãŒã·ã§ã³ãååšããæ·»ä»ã®ãœãŒã¹ã³ãŒããæ¥ãã§èª¿ã¹ãªãã§ãã ããã èªåã§ãã£ãŠã¿ãŠãã ããã
ãã¥ãŒãæäœãã
MVCãã¿ãŒã³ã®æ¬¡ã®ã³ã³ããŒãã³ãã§ããè¡šçŸã«ç§»ããŸãããã
ã¢ããã€ã¹ïŒ ãã¹ãŠãè©ŠãããGitHub https://github.com/vyunev/AspColumnViewDemoãããœãŒã¹ã³ãŒããããŠã³ããŒãããŠãã ãã ã
ãã¥ãŒã䜿çšããŠWebã¢ããªã±ãŒã·ã§ã³ãäœæãã
ãããè¡ãã«ã¯ãåã®ããŒãã§è¡ã£ãæ¹æ³ãšåæ§ã«ã空ã®ASP.NET MVC Webã¢ããªã±ãŒã·ã§ã³ViewDemoãäœæããŸãã ä»åã ããHomeControllerã¯æ¬¡ã®ããã«ãªããŸãã
public class HomeController : Controller { // GET: /Home/ public IActionResult Index() { return this.View(); } }
ViewïŒïŒã¡ãœããã¯ããã¥ãŒã䜿çšããŠã¢ã¯ã·ã§ã³ã®çµæãäœæããŸãã ãããžã§ã¯ããéå§ããŠãããã«ãšã©ãŒã¡ãã»ãŒãžãååŸããŠã¿ãŸãããã ãããžã§ã¯ãã«ã¯ãŸã ã€ã³ããã¯ã¹ã¢ã¯ã·ã§ã³ã®ãã¥ãŒããããŸããïŒå³4ïŒã
å³4-衚瀺ãããŠããªãå Žåã®ãšã©ãŒã¡ãã»ãŒãž
ã¡ãã»ãŒãžã®ããã¹ãã泚ææ·±ãèªããšããã¬ãŒã³ããŒã·ã§ã³ã®ãããžã§ã¯ãã®æ§é ã«æ確ã«å®çŸ©ãããå Žæãããããšã«æ°ä»ãã§ãããã ããããã¥ãŒãã©ã«ãã§ãã ã³ã³ãããŒã©ãŒã®ååã«å¯Ÿå¿ããååã®ãµããã©ã«ããŒãå«ãŸããŠããŸãã ãã®äŸã§ã¯ãããŒã ã«ãªããŸãã ãŸãããã¥ãŒãã¡ã€ã«ã¯æ¢ã«ä¿åãããŠããããã®ãã¡ã€ã«åã¯ãäžè¬çãªå Žåãç®çã®ã¢ã¯ã·ã§ã³ã®ååãšäžèŽããŠããŸãã
ããã«ãç¹å¥ãªãã©ã«ããŒViews / SharedããããŸãã ãããžã§ã¯ãå ã®ãã¹ãŠã®ã¢ã¯ã·ã§ã³ã«äœ¿çšã§ãããã¥ãŒãå«ãŸããŠããŸãã
äžèšã®ãã¥ãŒããã³ããŒã ãã©ã«ããŒãäœæããŸãã ãã®åŸãæåŸã«ãã³ã³ããã¹ãã¡ãã¥ãŒã®[è¿œå ]> [æ°ããã¢ã€ãã ...]ã䜿çšããŠãIndex.cshtmlãšããååã®ãã¥ãŒïŒMVCãã¥ãŒããŒãžïŒãè¿œå ããŸãã cshtmlæ¡åŒµã¯ãRazorããŒã¯ã¢ããèšèªã䜿çšãããããšã瀺ããŸãã ãã®çµæããããžã§ã¯ãã¯æ¬¡ã®ããã«ãªããŸãïŒå³5ïŒã
å³5-æ°ãããã¥ãŒã®ãããžã§ã¯ãæ§é
Index.cshtmlã«æ¬¡ã®ã³ãŒããè¿œå ããŸãã
<h1>View Demo</h1>
Webã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã 次ã®ããšãèµ·ãããŸãã
- Homeã³ã³ãããŒã©ãŒã®Indexã¢ã¯ã·ã§ã³ãåŒã³åºãããŸãïŒåã®èšäºã§èª¬æãããšããïŒã
- Indexã¢ã¯ã·ã§ã³ã§ã¯ãViewïŒïŒã¡ãœããã¯View / Home / Index.cshtmlãã¥ãŒã䜿çšããŠçµæïŒIActionResultãå®è£ ããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ïŒãäœæããŸãã
- ã¢ã¯ã·ã§ã³ã®çµæã¯ãã¯ã©ã€ã¢ã³ããžã®å¿çãšããŠHTMLã³ãŒããçæããŸãïŒIActionResultã€ã³ã¿ãŒãã§ã€ã¹ã®ExecuteResultAsyncã¡ãœããã§ïŒã
- äœæãããããŒãžã¯ã¯ã©ã€ã¢ã³ãã«éä¿¡ããã圌ã®ãã©ãŠã¶ã§è¡šç€ºãããŸãã
ViewïŒïŒã¡ãœããã¯ã次ã®ãã¹ã䜿çšããŠãã¥ãŒãæ€çŽ¢ããŸãã
- ãŸããView / <Controller Name> / <action name> .cshtml
- 次ã«ã衚瀺/å ±æ/ <ã¢ã¯ã·ã§ã³å> .cshtml
äž¡æ¹ã®æ€çŽ¢ã§äœãè¿ãããªãã£ãå Žåã¯ããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã
ãã¥ãŒã®ååãæ瀺çã«æå®ã§ããã¡ãœãããªãŒããŒããŒãããããŸãã ããšãã°ãåŒã³åºã
this.ViewïŒ "MyView"ïŒã¯ããã¡ã€ã«View / <Controller name> /MyView.cshtmlãŸãã¯View / Shared / MyView.cshtmlãæ¢ããŸãã ããã¯ãããšãã°ãã¢ã¯ã·ã§ã³ãäœããã®æ¡ä»¶ã«å¿ããŠç°ãªãçµæãäžããå Žåã«åœ¹ç«ã¡ãŸãã
ããã«ãããŒã¿ããã¥ãŒã«æž¡ãããšãã§ãããã¥ãŒïŒïŒãªãã·ã§ã³ããããŸãã ããã«ã€ããŠã¯ã以äžã§è©³ãã説æããŸãã ããã§ã¯ãRazorã®æ©èœãèŠãŠã¿ãŸãããã
Razor Markup Language
åºæ¬èšèš
Razorã¯æ¬¡ã®ãã¶ã€ã³ãåãå ¥ããŸãã
- @ {...}-ãã¥ãŒã®æ¬äœã«CïŒã³ãŒããè¿œå ã§ããŸãã
- @å€æ°ã@ããããã£ããŸãã¯@ã¡ãœããïŒïŒ-æååå€ãHTMLã³ãŒãã«æ¿å ¥ããŸãã ãã®å Žåãåºåã¯ãšã¹ã±ãŒããããŸãïŒã€ãŸããè¡ã«ã¿ã°ãå«ãŸããŠããå Žåããããã¯ãã¬ãŒã³ããã¹ããšããŠè¡šç€ºãããŸãããã¿ã°ãšããŠæ¿å ¥ãããŸããïŒã
- ãã®ãããªå¶åŸ¡æ§é ã¯æ¬¡ã®ããã«èš±å¯ãããŸãã
@if { ⊠} else { ⊠} @switch( ⊠) { ⊠} @for( ⊠) { ⊠} @foreach( ⊠) { ⊠} @while( ⊠) { ⊠}
ãããã§ã¯ãCïŒã³ãŒããHTMLã³ãŒããšçµã¿åãããããšãã§ããŸãã次ã«äŸã瀺ããŸãã
@for(int i=0; i<10;i++) { <p>@i</p> }
ãã¥ãŒã¯æ¬è³ªçã«ãç¬èªã®ããããã£ãšã¡ãœãããæã€IRazorPageãå®è£ ããã¯ã©ã¹ã§ããããšã«æ³šæããŠãã ããã ããšãã°ãViewBagãšViewDataã䜿çšã§ããŸãããããã«ã¯ãã¢ã¯ã·ã§ã³ã§è¿œå ãããå€ãå«ãŸããŸãã
å€æ°ã®ãã«ããŒã¡ãœãããæäŸããHtmlããããã£ããããŸãã ãããã®ããã€ãã次ã«ç€ºããŸãã
- @tml.RawïŒïŒ-ãšã¹ã±ãŒãããã«HTMLã³ãŒãã«ããã¹ãå€ãè¿œå ããŸãã
- @tml.CheckBoxForïŒïŒã@tml.TextBoxForïŒïŒãããã³ããŸããŸãªHTMLèŠçŽ ã®ã³ãŒããçæããããã®ãã®ä»ã®ã¡ãœããã
å¥ã®ãã«ããŒããããã£ã¯Urlã§ãã Webã¢ããªã±ãŒã·ã§ã³ã§ãã¹ãæäœããããã®ã¡ãœãããå«ãŸããŠããŸãã ããããæã人æ°ã®ãã@ Url.ActionïŒ...ïŒã¯ãæå®ãããã³ã³ãããŒã©ãŒã®æå®ãããã¢ã¯ã·ã§ã³ãžã®ãã¹ã衚瀺ããŸããäŸïŒ<a href="@ Url.Action("Index", "Home") ">ããŒã ããŒãž</ a>ã
ãŸããç¹æ®ãã¡ã€ã«Views / _ViewStart.cshtmlã«æ³šæããå¿ èŠããããŸãã ãã®ååšã¯å¿ ãããå¿ èŠã§ã¯ãããŸãããããããžã§ã¯ãã«ååšããå Žåããã®å 容ã¯åãã¬ãŒã³ããŒã·ã§ã³ã®åã«å®è¡ãããŸãã ããã䜿çšããŠããã¹ãŠã®ãã¥ãŒã«å ±éã®ããŒãžãã³ãã¬ãŒããèšå®ã§ããŸãã
ããŒãžãã³ãã¬ãŒã
éåžžãWebã¢ããªã±ãŒã·ã§ã³ã«ã¯å€æ°ã®ããŒãžãå«ãŸããŸãã ãããã®ã»ãšãã©ã¯ç¬èªã®è¡šçŸãæã£ãŠãããããHTMLã³ãŒããå«ãç¬èªã®ãã¡ã€ã«ãæã£ãŠããŸãã ããã«ãå€ãã®ããŒãžã«ã¯åããã³ãã¬ãŒãããããã¡ã€ã³ã³ã³ãã³ãïŒã³ã³ãã³ãïŒã®äžéšã®ã¿ãç°ãªããŸãã
åãã¥ãŒãã¡ã€ã«ã«ããŒãžã®HTMLã³ãŒãã®ã³ããŒãåã蟌ãŸãªãããã«ããã«ã¯ãã¬ã€ã¢ãŠãã䜿çšã§ããŸãã ãããè¡ãã«ã¯ã以äžãè¡ãå¿ èŠããããŸãã
- ãã¥ãŒ/å ±æã§å ±æããŒã¯ã¢ãããã¡ã€ã«ãäœæãã
- _ViewStart.cshtmlãŸãã¯ã¢ã¯ã·ã§ã³èªäœã§ã¯ãã¬ã€ã¢ãŠãããããã£ã䜿çšããŠããŒã¯ã¢ãããã¡ã€ã«ãæå®ããŸãã
ãã³ãïŒãã¡ã€ã«ãšãã¥ãŒã®äž¡æ¹ã§ãã³ãã¬ãŒããæå®ãããŠããå Žåããã¥ãŒã§æå®ããããã®ã䜿çšãããŸãã ãããã£ãŠã_ViewStart.cshtmlã§ããã©ã«ãã®ãã³ãã¬ãŒããèšå®ããå¿ èŠã«å¿ããŠãã¥ãŒã§ããããªãŒããŒã©ã€ãã§ããŸãã
- ãã¥ãŒã³ãŒãããã³ãã¬ãŒãã«æ¿å ¥ãããå Žæã¯ã@ RenderBodyïŒïŒãåŒã³åºãããšã«ãã£ãŠããŒã¯ãããŸãã
ãã®ãããView / Sharedãã©ã«ããŒã§ã_Layout.cshtml HTMLããŒã¯ã¢ãããã³ãã¬ãŒãã䜿çšããŠãã¡ã€ã«ãäœæããŸãïŒååã¯ä»»æã§ãïŒã
<html> <head> <meta charset="utf-8" /> <title>@this.ViewBag.Title</title> </head> <body> <nav>Menu</nav> <section id="mainContent"> @RenderBody() </section> <footer>Footer</footer> </body> </html>
ãã¥ãŒã³ãŒããå€æŽããŸãã
@{ this.ViewBag.Title = "Home page"; this.Layout = "~/Views/Shared/_Layout.cshtml"; } <h1>View Demo</h1>
ã芧ã®ãšããããã®ã³ãŒãã¯æ¬¡ã®ãšããã§ãã
- ãããŒã ããŒãžããšããå€ã§ViewBagã«Titleããããã£ãäœæããŸãã
- 䜿çšãããHTMLããŒã¯ã¢ãããã³ãã¬ãŒãã«ã¬ã€ã¢ãŠããèšå®ããŸãã
ããã§ãWebã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšãæå®ããããã³ãã¬ãŒãã䜿çšããŠããŒãžã衚瀺ãããŸãã ãHome pageããšããè¡ãèŠåºãã«æ¿å ¥ãããŸãã
ã»ã¯ã·ã§ã³
ãã¥ãŒã®ã³ãŒããã@ RenderBodyïŒïŒã«ãã£ãŠçæããããããã¯ã®ã³ãŒãå€ã®ããŒãžãã³ãã¬ãŒãã«æ¿å ¥ããããšãã§ããŸãã ãããã¯ã次ã®ããã«æ©èœããã»ã¯ã·ã§ã³ã§ãã
- ãã³ãã¬ãŒãã³ãŒãã¯ã@ RenderSectionïŒååãå¿ é ïŒãŸãã¯@RenderSectionAsyncïŒååãisRequiredïŒã䜿çšããŠã»ã¯ã·ã§ã³ãæ¿å ¥ããå Žæã瀺ããŸãã nameã¯ã»ã¯ã·ã§ã³ã®äžæã®ååãå®çŸ©ããå¿ é ã§ã-å¿ é ãã©ããã
- ãã¥ãŒã¯ã@ section name {...}ã³ã³ã¹ãã©ã¯ãã䜿çšããŠã»ã¯ã·ã§ã³ã®ã³ã³ãã³ããå®çŸ©ããŸã
- å¿ èŠãªã»ã¯ã·ã§ã³ã®ã³ãŒãããªãå Žåããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã
ã»ã¯ã·ã§ã³ã¯ããŒãžã®æ¬æã ãã§ãªããã¿ã€ãã«ã«ãé 眮ã§ããããšã«æ³šæããŠãã ããã ããšãã°ãããã䜿çšããŠãåå¥ã®ããŒãžã§ã®ã¿å¿ èŠãªå€éšJavaScriptã©ã€ãã©ãªãæ¥ç¶ã§ããŸãã
äŸã«ç§»ããŸãããã ããŒãžãã³ãã¬ãŒãã§ãªãã·ã§ã³ã»ã¯ã·ã§ã³ãå®çŸ©ãã
<html> <head> <meta charset="utf-8" /> <title>@this.ViewBag.Title</title> </head> <body> <nav>Menu</nav> <section id="mainContent"> @RenderBody() </section> <footer>Footer</footer> @RenderSection("scripts", required: false) </body> </html>
次ã«ããã¥ãŒã®ãã®ã»ã¯ã·ã§ã³ã®ã³ãŒããèšå®ããŸãã æ確ã«ãããããã¢ã©ãŒãïŒïŒãåŒã³åºããŸãã
@{ this.ViewBag.Title = "Home page"; } <h1>View Demo</h1> @section scripts { <script> alert("Demo"); </script> }
ãããžã§ã¯ããå®è¡ããJavaScriptãããŒãžã«è¿œå ãããŠå®è¡ãããããšã確èªããŸãã
éšåãã¥ãŒ
Razorã®ãã1ã€ã®äŸ¿å©ãªæ©èœã¯ãéšåãã¥ãŒã®äœæã§ãã ããã¯ãç¹°ãè¿ãããŒãžèŠçŽ ïŒãããã¢ãããã€ã¢ãã°ããã©ãŒã ãªã©ïŒãä¿åãããããšãè«ççã«å€§ããªããŒãžãéšåã«åå²ããããã®äž¡æ¹ã«äœ¿çšã§ããŸãã
éšåãã¥ãŒã®äœ¿çšã¯éåžžã«ç°¡åã§ãã
- éåžžã©ããéšåãã¥ãŒãäœæãã
- ããŒãžãã³ãã¬ãŒãã®äœ¿çšããã£ã³ã»ã«ããã«ã¯ãã¬ã€ã¢ãŠã= nullãæå®ããŸãã
- éšåãã¥ãŒãæ¿å ¥ããã«ã¯ã Html .PartialïŒïŒãŸãã¯Html .PartialAsyncïŒïŒã䜿çšããŸãã
ãã€ãã®ããã«ãäŸã«ç§»ããŸãããã æ°ãããã©ã«ããŒViews / Shared / Formsã§ã次ã®å 容ãå«ãéšåçãªview_ContactForm.cshtmlã®ãã¡ã€ã«ãäœæããŸãã
<form> Message: <input type="text" /><button type="submit">Send</button> </form>
ã€ã³ããã¯ã¹ãã¥ãŒã§ååŸããŸãã
@{ this.ViewBag.Title = "Home page"; } <h1>View Demo</h1> @Html.Partial("Forms/_ContactForm") @section scripts { <script> alert("Demo"); </script> }
éšåãã¥ãŒãžã®ãã¹ãã©ã®ããã«æå®ãããŠãããã«æ³šç®ããŠãã ããã 圌ã®æ€çŽ¢ã¯äžè¬çãªèŠåã«åŸãããã®å Žåããã¹ã¯Sharedãåºæºã«ããŠç€ºãããŸãã ãã¡ã€ã«ã¯ããã¥ãŒå ã®ä»»æã®ãã©ã«ããŒã«é 眮ã§ããŸã;ãã®å Žåãã¡ãœãããã©ã¡ãŒã¿ãŒã§ãµã€ãã®ã«ãŒãã«å¯Ÿããçžå¯Ÿãã¹ãæå®ããå¿ èŠããããŸãã ããšãã°ã Html .PartialïŒ "ã/ Views / Shared / Forms / _ContactForm"ïŒ
ãããžã§ã¯ããéå§ããŠçµæã確èªããã ãã§ãã
ã³ã³ããŒãã³ãã衚瀺
è¡šçŸãšããã°ãã³ã³ããŒãã³ããšããŠã®ASP.NET MVC 6ã®ãã®ãããªé©æ°ããã£ã³ã»ã«ããå¿ èŠããããŸãã æ¬è³ªçã«ãããã¯ç¬èªã®ã³ã³ãããŒã©ãŒãè¿œå ããããšã«ããéšåè¡šçŸã®ã¢ã€ãã¢ã®éçºã§ãã ãã ããæåã«ã¢ãã«ã®äœ¿çšãç解ããå¿ èŠããããŸãã ãããŠã次ã®éšåã®ã³ã³ããŒãã³ãã«æ»ãããšãå¯èœã«ãªããŸãã
ã¢ãã«ã䜿çšããŸã
åã®ããŒãã§äœæããã¢ããªã±ãŒã·ã§ã³ã«ã¯ãæ¢ã«ã³ã³ãããŒã©ãŒãšãã¥ãŒãå«ãŸããŠããŸãã MVCãã³ãã¬ãŒãã®å¥ã®ã³ã³ããŒãã³ãã§ããã¢ãã«ã®äœ¿çšæ¹æ³ãæ€èšããå¿ èŠããããŸãã
ã¢ããã€ã¹ïŒ ãã¹ãŠèªåã§è©ŠãããšããGitHub https://github.com/vyunev/AspColumnModelViewãããœãŒã¹ã³ãŒããããŠã³ããŒãããããšãã§ããŸã ã
ã¢ãã«ãäœæãã
æåŸã®ããŒãã§äœæããViewDemoã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠãã¢ãã«ã®äœæ¥ãè¿œå ããŸãã
ãããžã§ã¯ãã«ã¢ãã«ãé 眮ããã«ã¯ãModelsãã©ã«ããŒãäœæããŸãã ãã®ååã¯æšå¥šãããŸãããå¿ é ã§ã¯ãããŸããã ãããã®ã³ãŒãã¯ãç°ãªãååã®ãã©ã«ããŒã«é 眮ã§ããŸãã ããã«ããµããã©ã«ããŒã䜿çšããŠãã¯ã©ã¹ãè«ççã«ã°ã«ãŒãåã§ããŸãã
ã¢ãã«ã¯åçŽãªãªããžã§ã¯ãïŒPOCOïŒã§ãã ã¯ã©ã¹ããç¶æ¿ããããã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ãããããå¿ èŠã¯ãããŸããã ããšãã°ããŠãŒã¶ãŒåãšçŸåšã®æå»ãå«ãã¢ãã«ãäœæããŸãã ãããè¡ãã«ã¯ã次ã®ã³ãŒãã䜿çšããŠãIndexPageModel.csãã¡ã€ã«ãModelsãã©ã«ããŒã«è¿œå ããŸãã
using System; namespace ViewDemo.Models { public class IndexPageModel { public string FirstName { get; set; } public string LastName { get; set; } public string FullName => $"{this.FirstName} {this.LastName}"; public DateTime CurrentTime { get; set; } } }
ã¢ãã«ã®æºåãã§ããŸããã ã¢ãã«ã¯ã©ã¹ã«ã¯å¶éããªãããšã«æ³šæããŠãã ããã ããšãã°ããã®å Žåãèšç®ãããFullNameããããã£ãååšããŸãã ãã ãã倢äžã«ãªã£ãŠãã¢ããªã±ãŒã·ã§ã³ããžãã¯ãã¢ãã«ã«è»¢éããªãã§ãã ããã ã¢ããªã±ãŒã·ã§ã³ãããã«ã¡ã³ããã³ã¹ããããããããã«ãã§ããã ãåçŽãªãŸãŸã«ããŠããããšããå§ãããŸãã
ã³ã³ãããŒã©ãŒã®å€æŽ
ãã®ãããã¢ãã«ã¯ãã§ã«ååšããŠããŸãã ã€ã³ã¹ã¿ã³ã¹ãäœæããŠãããã€ãã®å€ãæžã蟌ãå¿ èŠããããŸãã ç°¡åã«ããããã«ãå®æ°ã䜿çšããŸãã Homeã³ã³ãããŒã©ãŒã«é²ã¿ã次ã®ããã«Indexã¢ã¯ã·ã§ã³ãå€æŽããŸãããã
public IActionResult Index() { var model = new IndexPageModel() { FirstName = "John", LastName = "Doe", CurrentTime = DateTime.Now }; return View(model); }
ã¢ãã«ããã¥ãŒã«è»¢éããã«ã¯ããã®ã€ã³ã¹ã¿ã³ã¹ãViewïŒïŒã¡ãœããã®ãã©ã¡ãŒã¿ãŒãšããŠçœ®ãæããã ãã§ååã§ãã ãã®äŸã§ã¯ãå®æ°ã䜿çšããŠã¢ãã«ã«ããŒã¿ãåã蟌ã¿ãŸãã ãã¡ãããå®éã®ãããžã§ã¯ãã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããžãã¹ããžãã¯ã«ã¢ããŒã«ããçµæãã¢ãã«ã«ä»£å ¥ããŸãã
ãã¥ãŒãå€æŽãã
index.cshtmlãã¥ãŒãéããŸãã ãŸããã¢ãã«ã®ç¹å®ã®ã¯ã©ã¹ã䜿çšããããšã瀺ãå¿ èŠããããŸãã ãããè¡ãã«ã¯ããã¡ã€ã«ã®æåã®è¡ã«æ¬¡ã®ããã«èšè¿°ããŸãã
@model ViewDemo.Models.IndexPageModel
ã¯ã©ã¹åã¯ãã®åå空éãšãšãã«æå®ãããããšã«æ³šæããŠãã ããã
ããã§ãæå®ãããã¿ã€ãã®æž¡ãããã¢ãã«ãå«ãthis.Modelããããã£ã䜿çšã§ããŸãã ããŒãžã«ããŒã¿ã衚瀺ããŸãïŒå®å šãªãã¥ãŒã³ãŒãIndex.cshtmlïŒïŒ
@model ViewDemo.Models.IndexPageModel @{ this.ViewBag.Title = "Home page"; } <h1>Model Demo</h1> <p><strong> :</strong> @this.Model.FullName</p> <p><strong> :</strong> @this.Model.CurrentTime.ToString()</p>
ã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã ããŒãžãæŽæ°ããããã³ã«ãã³ã³ãããŒã©ãŒã«ç€ºãããŠããååãšå§ãããã³çŸåšã®æ¥ä»ãšæå»ã衚瀺ãããŸãã
ãã®ãããã¢ãã«ã®äœæãšäœ¿çšã¯ãéåžžã®ã¯ã©ã¹ã»ã©é£ãããããŸããã ã€ã³ã¹ã¿ã³ã¹ããã¥ãŒã«æž¡ãäœæ¥ã¯ãã¹ãŠASP.NET MVCã«ãã£ãŠè¡ãããŸãã , this.Model , . IntelliSense .
Visual Studio 2015 ASP.NET5 Beta5. , Visual Studio .
ASP.NET5 Beta6 , . . .
ASP.NET5. Beta7 Beta8, , (RC1), 2016 . .
DevCon 2015, - ASP.NET .
䟿å©ãªãªã³ã¯
ASP.NET5 http://docs.asp.net/en/latest/ .
ASP.NET 5 Community Standup , Microsoft . .
ASP.NET- Visual Studio Code , - VS Code.
ASP.NET5 Microsoft.
, , vyunev@microsoft.com . , ASP.NET .
èè ã«ã€ããŠ
ãŽã§ã»ããã»ã¢ã³ãã¬ã€
ã·ãã¢éçºè ãCodeFirstãã¢ã€ã«ã©ã³ã
15幎ã®çµéšãæã€èªå®éçºè ãMicrosoft MVPïŒASP.Net/IISïŒã éå»9幎éã圌ã¯Microsoftãã¯ãããžãŒã䜿çšããWebéçºã«æºãã£ãŠããŸããã äž»ãªå°éåéïŒASP.NETããã³Azureã 圌ã¯çŸåšãCodeFirstã§ã·ãã¢éçºè ãšããŠåããŠããŸãã 圌ã«ã¯å°éçãªããã°ããããŸãã
ãã€ãã¿ãŒ ïŒ twitter.com/AndreyVeselov
FacebookïŒ www.facebook.com/veselov.andrey
ããã°ïŒ andrey.moveax.ru