MS_ASPNETMVCTerms - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ãïŒASP.NET MVCïŒ
ãASP.NET MVCã®çšèªãã¯
ãASP.NET MVCã®å©ç𿹿³ããšæ¯ã¹ãŠã
ASP.NET MVC ã®åºæ¬çãªãããã¯ããŸãšããŠããŸãã
è£è¶³ïŒæ¬ããŒãžã®åæïŒææ°åïŒ: æ¬ããŒãžãæ±ãã®ã¯
.NET Framework çã® ASP.NET MVC 5ïŒSystem.Web.MvcïŒã§ããã
ASP.NET Core MVC ãšã¯å¥å®è£ ã§ã
æŠå¿µã¯å ±éã ã API åãæ¢å®åäœãç°ãªãç®æããããäž»ãªå¯Ÿå¿é¢ä¿ïŒè©³çްã¯åç¯ã®è£è¶³ã§è¿°ã¹ãïŒ:
æ¬ããŒãžïŒASP.NET MVC 5ïŒ ASP.NET Core MVC ActionResultIActionResultHtml.TextBoxForçã¿ã° ãã«ããŒïŒ asp-forïŒAjax.BeginForm廿¢ïŒéšåæç»ãšJavaScriptïŒ RouteConfig.RegisterRoutesapp.MapControllerRouteBind屿§[Bind]ïŒå¥åšïŒïŒDTO åé¢ãæšå¥šHandleError屿§äŸå€ããã«ãŠã§ã¢ Global.asaxProgram.cs
Model ã«ã¯ã
- B å±€ã¯ã©ã¹ãšã
- B å±€ã¯ã©ã¹ãè¿ã View ã«æž¡ããã Entity, Bean, POCO çãªã¯ã©ã¹ïŒViewModelïŒ
ãããã
View ïŒ ç»é¢è¡šç€ºã®ããã®åŠçã
- ãã¹ã¿ããŒãžç㪠View ãšã
- å šäœ View
- éšå View ãããã
- Action Method ãå®è£ ããã
- Action Method ã¯ã
- ãMïŒModelïŒããåŒã³åºããŠ
- ãïŒBean â MïŒããååŸããŠ
- ãVïŒViewïŒãåŒã³åºãã
- CïŒControllerïŒãäœæ
- VïŒViewïŒãäœæ
- MïŒModelïŒãäœæ
- CïŒControllerïŒã« Action Method ã远å ããCâMâV ãšç¹ããã
- ã«ãŒãå®çŸ©ã«åŸããURL ãã Controller ã Action Method ã«åŠçãæ¯ãåããã
- ãŠãŒã¶ããã©ãŠã¶ã« URL ãå
¥åãããšã
æå®ããã«ãŒãã£ã³ã°èŠåã䜿çšããURL ãè§£æãããController ã®ãã¹ãç¹å®ãããã
- æ¢å®ã®ã«ãŒãå®çŸ©ã¯ãRouteConfig.RegisterRoutes ã¡ãœããã§å®çŸ©ãããŠããã
- ã³ã³ã§ MapRoute() ã¡ãœããã䜿çšããã«ãŒããã©ã¡ã¿ïŒrouteName, routeValuesïŒãç»é²ããã
- ã«ãŒããã©ã¡ã¿ïŒrouteName, routeValuesïŒã¯ãURL ã®äœæã«ã䜿çšãããã
- ããã©ã«ãã§ã¯ä»¥äžã®ããã«ã«ãŒãå®çŸ©ãããŠãã(èªç±ã«ã«ã¹ã¿ãã€ãºå¯èœ)
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);- åå¥ã®ã«ãŒãå®çŸ©ã¯ãRouteConfig.RegisterRoutes ã¡ãœããã§å®çŸ©ãããŠããã
- ã³ã³ã§ MapMvcAttributeRoutes() ã¡ãœããã䜿çšãã屿§ã«ãŒãã£ã³ã°ãæå¹åããã
routes.MapMvcAttributeRoutes();- 以äžã®ããã«ã«ãŒãå®çŸ©å¯èœ(èªç±ã«ã«ã¹ã¿ãã€ãºå¯èœ)
[Route("{controller}/{action}/{id}", Name="xxxx")]-
第äžåŒæ°ã«ã¯ãMapRoute ã®ãURL with parametersããšåããã®ãæå®ã
-
第äºåŒæ°ã® Name ã¯ãªãã·ã§ã³ã§ãHtml ãã«ããŒïŒ@Html.RouteLinkïŒã§äœ¿çšã§ããã
-
ãŸãããã©ã¡ã¿ã«ã€ããŠã以äžã®æ§ãªèšå®ãè¡ãããšãã§ããã
- ãªãã·ã§ã³èšå®
- æ¢å®å€ã®èšå®
- å¶çŽæ¡ä»¶ã®èšå®
- ããŒã¿åæå®
- å€ç¯å²æå®
- æ£èŠè¡šçŸæå®
- ã«ã¹ã¿ã å¶çŽæ¡ä»¶æå®
-
ãã®ä»ãã¢ãã«ã¬ãã«ã«æ¢å®ã® ActionMethod åã远å å¯èœã
[Route("{action=Top}")]
public class XXXXXController : Controller
{
public ActionResult Top() { ã»ã»ã» }
}ç§»è¡ã¡ã¢ïŒèª€èšïŒ: åæã®
[Route("{action=Top")]ã¯
éãæ³¢æ¬åŒ§ãæ¬ ããŠããããã[Route("{action=Top}")]ã«ä¿®æ£ããã
ã«ãŒããã¬ãã£ãã¯ã¹ã䜿çšãããšãã¢ãã«ã¬ãã«ã«ã
ãURL with parametersãã®ã«ãŒãéšåã®å®çŸ©ã远å ã§ããã
è£è¶³ïŒASP.NET Core ã§ã®æžãæ¹ïŒ: 屿§ã«ãŒãã£ã³ã°ã¯
ASP.NET Core MVC ã§ãåãèãæ¹ã§äœ¿ãã
ïŒããã API ã§ã¯å±æ§ã«ãŒãã£ã³ã°ãæšæºïŒã[ApiController] [Route("api/[controller]")] // ã«ãŒã ãã¬ãã£ãã¯ã¹ public class ProductsController : ControllerBase { [HttpGet("{id:int}")] // GET api/products/1 public IActionResult Get(int id) => Ok(); }
Program.csåŽã®èŠçŽã«ãŒãã£ã³ã°ã¯æ¬¡ã®åœ¢ã«ãªããapp.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");**
{id?}ïŒçç¥å¯èœïŒã{id:int}ïŒåå¶çŽïŒ**ãšãã£ã
ã€ã³ã©ã€ã³å¶çŽã䜿ããããã
åæãæãããå¶çŽæ¡ä»¶ã®èšå®ãã屿§ã®äžã§å®çµããŠæžããã
ãã®æããã©ãŠã¶ãã
http://server/applicationname/Products/Index/1
ãšãã URL ã§ãªã¯ãšã¹ããéä¿¡ããå Žåã
http://(Server FQDNå)/(Controllerå)/(Action Methodå)/(id å€)
ã«ãŒãå®çŸ©ã«åŸããããŒãžãã³ãã©ã¯
- Controller åïŒProducts
- Action Method åïŒIndex
- id (Action Method ã«æž¡ãå€)ïŒ1
ãšå€æãã
Products Controller ã® Index Action Method ãåŒã³åºãã
Action Method ã®åŒæ°ãšã㊠"1" ãæž¡ãã
Action Method åãš id å€ã¯çç¥å¯èœã§ãAction Method åãçç¥ãããšã
Index Action Method ãå®è¡ãããã
- ASP.NET MVC ã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãããŒã©ãŒãšã¢ã¯ã·ã§ã³ ã¡ãœãã
https://learn.microsoft.com/ja-jp/previous-versions/aspnet/dd410269(v=vs.98)
-
åŒæ°ãšã®ãããã®æ¹æ³
-
åæ¹åãã€ã³ãã£ã³ã°
POST ã GET ã®ãã©ã¡ã¿ã®ååãšäžèŽããåŒæ°ãå®çŸ©ããŠããã°ãèªåçã«ããããããã- Get ãªãã¯ãšãªæååã®ããŒå
- Post ãªããã©ãŒã ããŒã¿ã®ããŒå
- ã¢ãã«ãã€ã³ãã£ã³ã°
Model ã¯ã©ã¹ã䜿ãããšãã§ããïŒProperty åãšäžèŽãããïŒã
-
åæ¹åãã€ã³ãã£ã³ã°
- Controller ã® ActionMethod ãš View ã®éã«ã
ãã¹ãããã¯çãªåŸ©å åäœãããå Žåã«äŸ¿å©ã - Model ã¯ã©ã¹ã䜿ãïŒPost ã®å Žåã®ã¿ïŒã
- Controller ã® ActionMethod ãš View ã®éã«ã
-
-
ãã®ä»
- FormCollection ã䜿ã (Post ã®å Žåã®ã¿)
<form> ã®äžèº«ãã³ã¬ã¯ã·ã§ã³åãšããŠä¿æããããã®ã
- FormCollection ã䜿ã (Post ã®å Žåã®ã¿)
Action Method ã®çµæãšããŠãAction Result ãè¿ãã
詳现ã¯Action Resultãåç
§ã
-
ã¯ã©ã€ã¢ã³ãããéä¿¡ãããŠããããŒã¿ã®ããŒåãšã
Controller ã® Action Method ã®åŒæ°åãšãäžèŽããããŒå€ãæ¢ããŠããã€ã³ãããã -
éåžžã«åçŽãªä»çµã¿ã®ãããASP.NET Web Formsã«æ¯ã¹ãŠã
åäœãã¹ããé£ãæããªã£ãŠããåé¢ããªãŒããŒãã¹ãã£ã³ã°æ»æãåãæãã
ã»ãã¥ãªãã£çã«è匱ãšãŸã§ã¯èšããªããã課é¡ããããšèšããã -
ä»çµã¿ã®è©³çްã¯ãäžèšãåç §ã
è£è¶³ïŒãªãŒããŒãã¹ãã£ã³ã°æ»æãšã¯ïŒ: åæãç¹°ãè¿ãèŠåããŠãã
ãã®æ»æã¯ãã¢ãã« ãã€ã³ãã£ã³ã°ããéãããŠããé ç®ãçŽ çŽã«åããã
ããšã«èµ·å ããããç»é¢ã ååã»ã¡ãŒã«ã¢ãã¬ã¹ã®å ¥åæ¬ã®ã¿ ãã¢ãã«ã class User { Name; Email; IsAdmin; } æ»æè ã POST ã« IsAdmin=true ã远å ããŠéã â ã¢ãã« ãã€ã³ããŒãçŽ çŽã« IsAdmin ã«ãå€ãå ¥ãã â ãã®ãŸãŸä¿åãããšæš©éææ ŒASP.NET Web Forms ã§ã¯èµ·ãã«ããã®ã¯ã
ViewStateã§ãç»é¢ã«åºããé ç®ããåºå®ãããŠããããã§ãã
ïŒåæããWeb Forms ã«æ¯ã¹ãŠããšæžããŠããã®ã¯ãã®å¯Ÿæ¯ïŒã察çã®åªå é äœ:
察ç è©äŸ¡ â ç»é¢å°çšã® ViewModelïŒDTOïŒãäœ¿ã æåãå±éºãªé ç®ãããããç¡ã â¡ [Bind(Include=...)]ã§æç€ºæå¹ã ããé ç®è¿œå æã«æŒãããã ⢠[Bind(Exclude=...)]å±éºïŒé€å€æŒããèµ·ããïŒ â£ ä¿ååã«æã§è©°ãæ¿ãã æå¹ ãšã³ãã£ãã£ããã®ãŸãŸ Action Method ã®åŒæ°ã«ããªãã
ãšããã®ãçŸåšã®å®ç³ã§ããã
ASP.NET Core ã§ãåãåé¡ã¯æ®ã£ãŠããã
Request ãæ€çŽ¢ã㊠Value ãååŸããã¯ã©ã¹ã
- æ¢å®ã® ValueProvider
| é çª | ValueProvider | å€ååŸå |
|---|---|---|
| ïŒ | ChildActionValueProvider | åã¢ã¯ã·ã§ã³ |
| ïŒ | FormValueProvider | ãã©ãŒã å€ |
| ïŒ | RouteDataValueProvider | Route ããŒã¿ |
| ïŒ | QueryStringValueProvider | ã¯ãšãªæåå |
| ïŒ | HttpFileCollectionValueProvider | HTTP ãã¡ã€ã«ã®ã³ã¬ã¯ã·ã§ã³ |
- ãã®ä»ã® ValueProvider
| é çª | ValueProvider | å€ååŸå |
|---|---|---|
| ïŒ | JsonValueProvider | Json |
| ïŒ | CookieValueProvider | Cookie |
| ïŒ | SessionValueProvider | Session |
| ïŒ | ServerVariablesValueProvider | ServerVariables |
| ïŒ | TempDataValueProviderFactory | TempData |
ç§»è¡ã¡ã¢ïŒè¡šèšïŒ: åæã®ãValuProviderãã¯
ValueProviderã®è¡šèšæºããšå€æãçµ±äžããã
-
ValueProvider ã®åŠçé
äžèšã®æ¢å®ã® ValueProvider 㯠Controller.ValueProvider ã®é çªãšåã
ïŒåãããŒåã®å ŽåãValueProvider ã®é ã«å åã«ãªãïŒ -
ValueProvider ã®è¿œå
以äžã® ValueProviderFactory ã§é ã«æ°èŠ ValueProvider ã远å ã§ããã- å®è£ ïŒGlobal.Application_Start ã«å®è£ ïŒ
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
ValueProviderFactories.Factories.Add(new CookieValueProviderFactory());
ValueProviderFactories.Factories.Add(new SessionValueProviderFactory());
ValueProviderFactories.Factories.Add(new ServerVariablesValueProvider());
ValueProviderFactories.Factories.Add(new TempDataValueProviderFactory());-
åè
- ValueProviderFactory ã¯ã©ã¹ (System.Web.Mvc)
https://learn.microsoft.com/en-us/dotnet/api/system.web.mvc.valueproviderfactory
- ValueProviderFactory ã¯ã©ã¹ (System.Web.Mvc)
-
ã«ã¹ã¿ã ValueProvider ã®èªäœ
ã«ã¹ã¿ã ã® ValueProvider ãå®è£ ããããã«ä»¥äžã® I/F ã䜿çšããã- IValueProviderïŒå€ãããã€ããŒã«å¿ èŠãªã¡ãœãããå®çŸ©ïŒ
- IEnumerableValueProviderïŒåæã«å¿ èŠãªã¡ãœãããå®çŸ©ïŒ
- IUnvalidatedValueProviderïŒæ€èšŒã¹ãããã«å¿ èŠãªã¡ãœãããå®çŸ©ïŒ
è£è¶³ïŒãå åã¡ããäºæ ã®ããšã«ãªãïŒ: åãååã®ããŒã
ãã©ãŒã ãšã¯ãšãªæååã®äž¡æ¹ã«ããå Žåã
äžè¡šã®é ïŒForm ãå ïŒã§æ±ºãŸããPOST /Edit?id=1 ïŒã¯ãšãªæååã« id=1ïŒ Body: id=99 ïŒãã©ãŒã ã«ã id=99ïŒ â FormValueProvider ãå ãªã®ã§ 99 ãæ¡çšãããã©ãããåãããæç€ºããã®ãå®å šã§ããã
// ASP.NET MVC 5 public ActionResult Edit([FromUri] int id, MyModel model) { } // ASP.NET CoreïŒå±æ§ãæŽçãããŠããïŒ public IActionResult Edit([FromRoute] int id, [FromForm] MyModel model) { }ASP.NET Core ã®ãã€ã³ãå 屿§:
屿§ ååŸå [FromRoute]ã«ãŒã ãã©ã¡ãŒã¿ [FromQuery]ã¯ãšãªæåå [FromForm]ãã©ãŒã [FromBody]ãªã¯ãšã¹ãæ¬æïŒJSONïŒ [FromHeader]ããã㌠[FromServices]DI ã³ã³ãããŒïŒASP.NET Core ã«ããã DIïŒ
[ApiController]ãä»ãããšãããããèŠçŽã§èªåæšè«ããã
ïŒè€ååã¯[FromBody]ãåçŽåã¯[FromQuery]çïŒã
-
ModelBinder ã¯ãValueProvider ããå¿ èŠãªããŒã¿ãååŸãã
Model ã«å¯ŸããŠå€ã®èšå®ãè¡ãã -
DefaultModelBinder ã¯ãåè¿°ã®ãæ¢å®ã® ValueProviderãããå¿ èŠãªããŒã¿ãæ€çŽ¢ããã
-
ã«ã¹ã¿ã ModelBinder ã®èªäœãå¯èœã
åè¿°ã® ModelBinder ã®åäœãå¶åŸ¡ããã
éåžžã
- ã³ã¬ã¯ã·ã§ã³ç³»ã¯ Form
- ããªããã£ãå㯠QueryString
ããååŸããããã«ãªã£ãŠãããã
以äžã®å±æ§ã Action Method ã®åŒæ°ã«å¯ŸããŠäœ¿çšãããšããã®åäœã倿Žã§ããã
-
FromUri 屿§
QueryString ããå€ãååŸããããã«å¶åŸ¡ã -
FromBody 屿§
Form ããå€ãååŸããããã«å¶åŸ¡ã
ç§»è¡ã¡ã¢ïŒ
FromBodyã®èª¬æïŒ: åæã¯
ãFromBody 屿§ïŒForm ããå€ãååŸããããã«å¶åŸ¡ããšããŠãããã
æ£ç¢ºã«ã¯[FromBody]ã¯ããªã¯ãšã¹ãæ¬æïŒJSON / XML çïŒããååŸããã
ãšããæå³ã§ããïŒWeb API ç±æ¥ã®å±æ§ïŒã
ãã©ãŒã ããŒã¿ã®ååŸã¯æ¢å®ã®åäœã§ããã
ASP.NET Core ã§ã¯[FromForm]ãå¥éçšæãããŠããã
ASP.NET MVCã¯ãASP.NET Web Formsãšæ¯ã¹ãŠã
ãªãŒããŒãã¹ãã£ã³ã°æ»æãåãæãããåŒæ°ãæèšããä»çµã¿ã
-
åºç€
-
Bind 屿§ã®åŒæ°
- Prefix : Form ã® name 屿§ã® Prefix
http://stackoverflow.com/questions/1317523/how-to-use-bind-prefix - Include : Bind 察象㮠Property åïŒã«ã³ãåºåãïŒ
- Exclude : Bind çŠæ¢ã® Property åïŒã«ã³ãåºåãïŒ
- Prefix : Form ã® name 屿§ã® Prefix
-
èšå®æ¹æ³
Action Methodã«ä»¥äžã®æ§ãªå±æ§ãä»äžããã[Bind(Include = "PropName1, PropName2...")][Bind(Exclude = "PropName3, PropName4...")][Bind(Include = "PropName1, PropName2...", Exclude = "PropName3, PropName4...")]
-
-
å¿çšïŒã³ã¬ã¯ã·ã§ã³ã Bind ãããšãã® name or key ã®èšå®æ¹æ³ïŒ
http://qiita.com/kazuhisam3/items/94542f6d7ccf3acca41c- é
å or ãªã¹ãç³»
VariableName[n].PropertyName[n].PropertyName
- Dictionary ç³» :
-
VariableName[n].Key,VariableName[n].Value.PropertyName -
[n].Key,[n].Value.PropertyName
-
- é
å or ãªã¹ãç³»
è£è¶³ïŒASP.NET Core ã§ã¯
Includeãç¡ããªã£ãïŒ:[Bind]ã¯
ASP.NET Core ã«ãããããåŒæ°ã®åœ¢ãå€ãã£ãŠããã// ASP.NET MVC 5 public ActionResult Create([Bind(Include = "Name,Email")] User user) // ASP.NET CoreïŒããããã£åãçŽæ¥åæãExclude ã¯ç¡ãïŒ public IActionResult Create([Bind("Name,Email")] User user)
Excludeã廿¢ãããã®ã¯ã
**ãé€å€æ¹åŒã¯æŒããã**ãšããåè¿°ã®çç±ã«ããã
ãã¯ã€ããªã¹ãïŒåæïŒã®ã¿ãæ®ãããããšèªããããªããæšå¥šã¯äŸç¶ãšã㊠ViewModelïŒDTOïŒã®åé¢ã§ããã
-
ã¢ãã«ãã€ã³ãã£ã³ã°
- ASP.NET ã¢ãã«ãã€ã³ãã£ã³ã° - Qiita
http://qiita.com/kazuhisam3/items/94542f6d7ccf3acca41c - ASP.NET WEB API ã¢ãã«ãã€ã³ã ãã®ïŒ å€ã®ååŸå
- miso_soup3 Blog
http://miso-soup3.hateblo.jp/entry/20130204/1359976197 - ASP.NET MVC - ASP.NET MVC ã¢ãã« ãã€ã³ãã£ã³ã°ã®ç¹é·ãšåé¡ç¹
https://learn.microsoft.com/ja-jp/archive/msdn-magazine/2012/august/asp-net-mvc-the-features-and-foibles-of-asp-net-mvc-model-binding
- ASP.NET ã¢ãã«ãã€ã³ãã£ã³ã° - Qiita
-
DefaultModelBinder
- 匷åã«ãªã£ãDefaultModelBinder
http://takepara.blogspot.jp/2009/02/defaultmodelbinder.html
- 匷åã«ãªã£ãDefaultModelBinder
-
ValueProvider
- ValueProviderãæ±ããšãã«æ°ãã€ããããš - miso_soup3 Blog
http://miso-soup3.hateblo.jp/entry/20120625/1340633706
- ValueProviderãæ±ããšãã«æ°ãã€ããããš - miso_soup3 Blog
- Controller ã® ActionMethod ãš View ã®éã«ããã¹ãããã¯çãªåŸ©å åäœãããå Žåã«äŸ¿å©ã
- Model ã¯ã©ã¹ã䜿ãïŒPost ã®å Žåã®ã¿ïŒã
@model ã§å®çŸ©ãã Model ããããã£ãšã
ã®Html ãã«ããŒã䜿çšããã
以äžã®ããã«åæ¹åãã€ã³ãããã
- Controller
return View(vm);- View ã¹ã¯ãªãã
@model ViewModel
ã»ã»ã»
Html.TextBoxFor(model => model.Category)
éåžžãModel ããããã£ã¯ãModel ã§ã¢ã¯ã»ã¹ãããã
ããã§ã® model ã¯ã©ã ãåŒã®ä»®åŒæ°åãªã®ã§èªç±ã
ç§»è¡ã¡ã¢ïŒè¡šèšïŒ: åæã®
@Model ViewModelã¯
**ãã£ã¬ã¯ãã£ããšããŠã¯@modelïŒå°æåïŒ**ãæ£ãã
ïŒ@Modelã¯ãModel ããããã£ããæãïŒã
åæèªèº«ãModel ããããã£ã®ç¯ã§
@model ViewModelClassãšæžããŠããããã
ãã¡ããæ£ãšããŠçµ±äžããã
ãŸãHtml.TextBoxFor?(...)ã®?ã¯å ¥å誀ããšå€æãåé€ããã
Xxxxx ãš XxxxxForã®éã
-
XxxxxFor ã¡ãœããã¯ãã¢ãã«ãã€ã³ãã£ã³ã°ã«å¯Ÿå¿ãã
- èŠçŽ åïŒid, name 屿§ïŒãèªåã§èšå®ããããã
- èŠçŽ åïŒid, name 屿§ïŒãæå®ããåŒæ°ãç¡ãã
-
åè
- LabelïŒTextBoxïŒTextAreaïŒPasswordïŒHiddenïŒ RadioButtonïŒCheckBoxã¡ãœããRazor - Build Insider
http://www.buildinsider.net/web/bookaspmvc5/040207 - TextBoxForïŒTextAreaForïŒPasswordForïŒ HiddenForïŒRadioButtonForïŒCheckBoxForã¡ãœããRazor - Build Insider
http://www.buildinsider.net/web/bookaspmvc5/040203
- LabelïŒTextBoxïŒTextAreaïŒPasswordïŒHiddenïŒ RadioButtonïŒCheckBoxã¡ãœããRazor - Build Insider
Controller ã® Action Method ã¯ãView ã®éžæãšæç€ºãšããŠã
ActionResult ã¯ã©ã¹ã®
ãªããžã§ã¯ããè¿ãå¿
èŠãããã
Action Method ã§ã
return View();ãšãView ãæå®ããªã overload ã§åŒã³åºããšã
/Views/ã³ã³ãããŒã©å/ã¢ã¯ã·ã§ã³å.cshtml
ãåŒã³åºãã
ActionResult ã¯ã©ã¹ã«ã¯ã以äžã®çš®é¡ãååšããã
| é çª | çš®é¡ | æŠèŠã»çšé | ã³ãŒãäŸïŒãã«ããŒã»ã¡ãœããïŒ |
|---|---|---|---|
| ïŒ | ViewResult | æå®ãããå
šäœ View ã®è¡šç€ºãæç€ºããã åºæ¬çã«ã¯ HTML.BeginForm ã®å Žåã«äœ¿çšããã |
return View("Result");("Result" ã¯å šäœ View å) |
| ïŒ | PartialViewResult | æå®ãããéšå View ã®è¡šç€ºãæç€ºããã åºæ¬çã«ã¯ Ajax.BeginForm ã®å Žåã«äœ¿çšããã |
return PartialView("Result");("Result" ã¯éšå View å) |
| ïŒ | RedirectResult | æå®ãã URL ã«ãªãã€ã¬ã¯ãããå Žåã«äœ¿çšããã | return Redirect("http://www.wings.msn.to/"); |
| ïŒ | RedirectToActionResult | æå®ãã Controller, Action ã«ãªãã€ã¬ã¯ãããå Žåã«äœ¿çšããã | return RedirectToAction("Index"); |
| ïŒ | RedirectToActionResult | æå®ããã«ãŒããã©ã¡ã¿ïŒrouteName, routeValuesïŒã«ãªãã€ã¬ã¯ãããå Žåã«äœ¿çšããã | return RedirectToRoute("View Product", new { ProductName = <ååå> }); |
| ïŒ | FilePathResult | æå®ããããã¹ã®å 容ããã¡ã€ã«ãšããŠåºå | return File(@"C:\temp\file.zip", "application/zip", "file.zip"); |
| ïŒ | FileContentResult | byte é åã®å 容ããã¡ã€ã«ãšããŠåºå | return File(bytes, "application/pdf"); |
| ïŒ | FileStreamResult | ã¹ããªãŒã ã®å 容ããã¡ã€ã«ãšããŠåºå | return new FileStreamResult(fileStream, "application/pdf"); |
| ïŒ | ContentResult | ãã¬ãŒã³ã»ããã¹ããåºåïŒCSV åºåçïŒ | return Content("ããã«ã¡ã¯ãäžçïŒ", "text/plain"); |
| 10 | JsonResult | æå®ãããã³ã³ãã³ãã JSON ãšããŠåºåïŒAjax éä¿¡ïŒ | return Json(JsonConvert.SerializeObject(result), JsonRequestBehavior.AllowGet); |
| 11 | JavaScriptResult | æå®ãããã³ã³ãã³ãã JavaScript ã¹ã¯ãªãããšããŠåºå | return JavaScript(code); |
| 12 | EmptyResult | äœãããªã | ïŒ |
ç§»è¡ã¡ã¢ïŒè¡šã®å±éïŒ: åæã¯ 5 è¡ç®ã®ãçš®é¡ãåã
PukiWiki ã®ã»ã«çµåïŒ~ïŒã§ 4 è¡ç®ãšå ±æããŠãããã
GitHub Markdown ã«ã»ã«çµåãç¡ãããåãå€ãå±éããã
ãŸã"C:\temp\file.zip"㯠C# ã®ãªãã©ã«ãšããŠäžæ£ãªã®ã§
@"C:\temp\file.zip"ã«ä¿®æ£ããã
-
c# - RedirectToAction and RedirectToRoute - Stack Overflow
http://stackoverflow.com/questions/8944355/redirecttoaction-and-redirecttoroute -
åè
-
ActionResult ã¯ã©ã¹
https://learn.microsoft.com/en-us/dotnet/api/system.web.mvc.actionresult -
ASP.NET MVC ActionResultã®æŽŸçå | å®å®ä»®é¢ã®ç 究宀
https://uchukamen.wordpress.com/2011/02/06/asp-net-mvc-actionresult%E3%81%AE%E6%B4%BE%E7%94%9F%E5%9E%8B/ -
é£èŒïŒASP.NET MVCå ¥éïŒç¬¬3å
ActionResultãªããžã§ã¯ãã§ã¢ã¯ã·ã§ã³æäœãèªç±èªåš - ïŒ IT
-
è£è¶³ïŒASP.NET Core ã§ã®æ»ãå€ïŒ: ASP.NET Core ã§ã¯
IActionResultãåºæ¬ã§ãActionResult<T>ã䜿ããã// åãæç€ºã§ããïŒSwagger çæã«ãå¹ãïŒ public ActionResult<Product> Get(int id) => _repo.Find(id) is { } p ? p : NotFound();JSON ã®è¿ãæ¹ãç°¡æœã«ãªã£ãŠããç¹ãéãã§ããã
// ASP.NET MVC 5ïŒJsonRequestBehavior ãå¿ èŠã ã£ã return Json(obj, JsonRequestBehavior.AllowGet); // ASP.NET CoreïŒGET ã§ãæ®éã«è¿ãã return Ok(obj); // ãŸã㯠return obj;ïŒ[ApiController] æïŒ
JsonRequestBehavior.AllowGetãäžèŠã«ãªã£ãã®ã¯ã
ãã€ãŠã® JSON ãã€ãžã£ãã¯å¯Ÿçã
çŸåšã®ãã©ãŠã¶ã§ã¯äžèŠã«ãªã£ãããã§ããããªããåæã®äŸã
JsonConvert.SerializeObjectãæž¡ããŠããã®ã¯
äºéã·ãªã¢ã©ã€ãºã«ãªãããæ³šæãèŠã
ïŒJson()èªäœãã·ãªã¢ã©ã€ãºããã®ã§ããªããžã§ã¯ãããã®ãŸãŸæž¡ãïŒã
View ã§ã¯ãªããHTTP ç¶æ ã³ãŒããè¿ãã
| é çª | çš®é¡ | æŠèŠã»çšé | ã³ãŒãäŸïŒãã«ããŒã»ã¡ãœããïŒ |
|---|---|---|---|
| ïŒ | HttpStatusCodeResult | ä»»æã® HTTP å¿çã³ãŒããã»ãã | ïŒ |
| ïŒ | HttpUnauthorizedResult | HTTP å¿çã³ãŒãã401 Unauthorizedããã»ãã | ïŒ |
| ïŒ | HttpNotFoundResult | HTTP å¿çã³ãŒãã404 NotFoundããã»ãã | ïŒ |
- System.Web.Mvc.HttpStatusCodeResult
https://learn.microsoft.com/en-us/dotnet/api/system.web.mvc.httpstatuscoderesult- System.Web.Mvc.HttpNotFoundResult
- System.Web.Mvc.HttpUnauthorizedResult
å¯èœ
-
ãã£ã«ã¿å±æ§ã¯ãActionMethod ã«ã以äžã®æ§ãªå ±éçãªåŠçã远å ããããã«äœ¿çšããã
- èªèšŒåŠç
- äŸå€åŠç
- ãã®ã³ã°
- , etc.
-
ãã£ã«ã¿å±æ§ã¯ã以äžã«èšå®å¯èœã§ããã
| é çª | é©çšç¯å² | èšçœ®å Žæ | 説æ |
|---|---|---|---|
| ïŒ | ActionMethod Filter | ActionMethod | ActionMethod åäœ |
| ïŒ | Controller Filter | Controller | Controller åäœ |
| ïŒ | Global Filter | FilterConfig | Application åäœ |
- 以äžã®ãã£ã«ã¿å±æ§åé¡ããããå®è£ ãããåŠçã¯é çªã®é çªã«åŒã³åºãããã
| é çª | åé¡ | å®è£ ãã I/F | å®è£ ããåŠç |
|---|---|---|---|
| ïŒ | èªèšŒ | IAuthenticationFilter | èªèšŒã«é¢ä¿ããåŠç |
| ïŒ | æ¿èª | IAuthorizationFilter | æ¿èªïŒèªå¯ïŒã«é¢ä¿ããåŠç |
| ïŒ | Action | IActionFilter | ActionMethod ã®éå§åŠçã®ååŸåŠç |
| ïŒ | Result | IResultFilter | ActionMethod ã®çµäºåŠçã®ååŸåŠç |
| ïŒ | äŸå€ | IExceptionFilter | äŸå€åŠç |
| ïŒ | Override | IOverrideFilter | äžäœãã£ã«ã¿ãäžæžã |
- æšæºã®ãã£ã«ã¿å±æ§ã«ã¯ä»¥äžã®æ§ãªãã®ãããã
| é çª | åé¡ | 屿§ | æŠèŠ |
|---|---|---|---|
| ïŒ | æ¿èª | Authorize 屿§ | èªèšŒæžã¿ã¢ã¯ã»ã¹ïŒCookie èªèšŒãToken èªèšŒïŒ |
| ïŒ | æ¿èª | ChildActionOnly屿§ | åã¢ã¯ã·ã§ã³ãšããŠã®ã¿åŒã³åºãå¯èœã«èšå® |
| ïŒ | æ¿èª | RequireHttps 屿§ | HTTPS ã¢ã¯ã»ã¹ã®ã¿åŒã³åºãå¯èœã«èšå® |
| ïŒ | æ¿èª | ValidateInput 屿§ | XSS 察çã«äœ¿çšããã |
| ïŒ | æ¿èª | ValidateAntiForgeryToken 屿§ | CSRF 察çã«äœ¿çšããã |
| ïŒ | äŸå€ | HandleError 屿§ |
<customErrors mode="On or RemoteOnly"/>ïŒ FilterConfig ã«èšå®ããæã®ã«ã¹ã¿ã ãšã©ãŒããŒãžã®å®çŸ© |
| ïŒ | Action/äŸå€/Result | OutputCache 屿§ | åºåãã£ãã·ã¥ã«ãŒã«ã®å®çŸ© |
| ïŒ | Action/Result | AsyncTimeout 屿§ | éåæåŠçã®ã¿ã€ã ã¢ãŠãã®å®çŸ© |
| ïŒ | Override | OverrideAuthentication 屿§ | ã°ããŒãã«ã»ã¢ãã«ãªã©äžäœã§å®çŸ©ããããã£ã«ã¿ãäžæžã |
| ïŒ | Override | OverrideAuthorization 屿§ | åäž |
| ïŒ | Override | OverrideAction 屿§ | åäž |
| ïŒ | Override | OverrideResult 屿§ | åäž |
| ïŒ | Override | OverrideException 屿§ | åäž |
ç§»è¡ã¡ã¢ïŒè¡šã®å±éïŒ: é çª 9 ã® Override ç³» 5 è¡ã¯ã
åæã§ã¯ã»ã«çµåïŒ~ïŒã§é çªã»åé¡ã»æŠèŠãå ±æããŠããããã
å€ãå±éããŠæ²èŒããã
-
ãã£ã«ã¿å±æ§ã¯ãèªäœå¯èœã
-
åè
- FiltersïŒASP.NET CoreïŒ
https://learn.microsoft.com/ja-jp/aspnet/core/mvc/controllers/filters
- FiltersïŒASP.NET CoreïŒ
è£è¶³ïŒASP.NET Core ã®ãã£ã«ã¿ãŒãšããã«ãŠã§ã¢ã®äœ¿ãåãïŒ: æŠå¿µã¯
ã»ãŒãã®ãŸãŸåŒãç¶ãããŠããããããã«ãŠã§ã¢ãšããéžæè¢ãå¢ãã
ïŒHttpApplicationïŒGlobal.asaxïŒãHttpModuleãHttpHandlerïŒããããã«ãŠã§ã¢ã ãã¹ãŠã®ãªã¯ãšã¹ããéããMVC ã®å€åŽ â éçãã¡ã€ã«ãèªèšŒãCORSãå§çž®ãäŸå€åŠç ããã£ã«ã¿ãŒã MVC ã®ãã€ãã©ã€ã³å ãModelState çã«ã¢ã¯ã»ã¹ã§ãã â èªå¯ãã¢ãã«æ€èšŒãã¢ã¯ã·ã§ã³åºæã®ãã°å€æã®ç®å®: MVC ã®æ å ±ïŒ
ModelStateãã¢ã¯ã·ã§ã³åã
ã«ãŒãå€ïŒãèŠããªããã£ã«ã¿ãŒãèŠããªããªãããã«ãŠã§ã¢ãäž»ãªå€æŽç¹:
ASP.NET MVC 5 ASP.NET Core IAuthenticationFilter廿¢ïŒèªèšŒã¯ããã«ãŠã§ã¢ãžïŒ HandleError屿§UseExceptionHandlerããã«ãŠã§ã¢OutputCache屿§[ResponseCache]/ åºåãã£ãã·ã¥ïŒ.NET 7+ïŒAsyncTimeout屿§CancellationTokenãåãåããã£ã«ã¿ãŒã® DI [ServiceFilter]/[TypeFilter]ã§æ³šå ¥ã§ãã// DI ãå¹ããããã£ã«ã¿ãŒ [ServiceFilter(typeof(MyAuditFilter))] public IActionResult Index() { ... }
Controller ããã® ActionMethod ã®åŒã³åºããå¶åŸ¡ããã
| é çª | 屿§ | æŠèŠ |
|---|---|---|
| ïŒ | HttpXxxxx 屿§ | Action Method ãåãä»ãã HTTP Method ãæå® |
| ïŒ | AcceptVerbs 屿§ | Action Method ãåãä»ããïŒã€ä»¥äžã® HTTP Method ãæå® |
| ïŒ | NonAction 屿§ | Action Method ã§ãªãããšãæç€ºããã |
| ïŒ | ActionName 屿§ | Action Method åãšå¥åã® Action Name ãä»äžããã |
ã»ã¬ã¯ã¿å±æ§ã¯ãèªäœå¯èœã
ãã®æè¡ã®ç»å Žã®èæ¯ã«ã¯ C10k problem (C10K åé¡)ãš
èšããã®ãããæš¡æ§ã
-
ASP.NET MVC ã§ã®éåæã³ã³ãããŒã©ãŒã®äœ¿çš
https://learn.microsoft.com/ja-jp/previous-versions/aspnet/ee728598(v=vs.98)-
éåæ Controller ã䜿çšãããšãasync/awaitã䜿çšãã
Web ãµãŒãã®ã¹ã¬ããæ¯æžãé²ãããšãã§ããã -
å®è¡ã«æéã®ããã CPU ãã€ã³ã以å€ã®èŠæ±ã«éåæ Controller ã䜿çšãããšã
Web ãµãŒãã®åŸ æ©ã¹ã¬ãããä»ã«è»¢çšå¯èœã«ãªãã®ã§ãWeb ãµãŒãã®ã¹ã¬ããæ°ãç¯çŽãã
ã¹ã¬ããæ¯æžã«ãããHTTP 503 (ãµãŒããŒãããžãŒç¶æ ã§ãã)ãã鲿¢ã§ããã -
å³ããããªã¯ãšã¹ãåŠçéå§æãšã¬ã¹ãã³ã¹åŠççµäºæã®ã¹ã¬ãããå€ããããšãè§£ãã
åŸã®ã¹ã¬ããã¯ç¬ç«ããã¹ã¬ããããŒã«ããååŸãããè€éãªã®ã§ãªãŒããŒããããããã
-
å éšçã«ã¯ãI/O å®äºããŒãã䜿çšããŠãããã®ãšæãããã
-
æ§ïŒAsyncController ãç¶æ¿ãããïŒ
- AsyncController ãç¶æ¿ããã
- 以äžã®åœåèŠçŽãå®ã£ã Action Method ãå®çŸ©ããã
- ActionNameAsync
- ActionNameCompletedïŒdelegateïŒ
-
Task<ActionResult> ãè¿ãã
MVC 4 以éã§ããã°ã以äžã®ããã«æžããã- Action Method å éšã§ Task ã䜿çšããå Žåã
public Task<ActionResult> Index()- Action Method å éšã§async/awaitããŒã¯ãŒãã䜿ãå Žåã
public async Task<ActionResult> Index()è£è¶³ïŒASP.NET Core ã§ã¯éåæãæ¢å®ïŒ: ASP.NET Core ã§ã¯
AsyncControllerãšããåºå¥èªäœãç¡ãããã¹ãŠã®ã³ã³ãããŒã©ãŒã
async Task<IActionResult>ãè¿ãããpublic async Task<IActionResult> Index(CancellationToken ct) { var items = await _repo.ListAsync(ct); return View(items); }ãŸããASP.NET config ã§è¿°ã¹ãéãã
åæã³ã³ããã¹ããæ€å»ãããããã
async/await ã®ãããããã¯åé¡ãæ§é çã«è§£æ¶ããŠããã
CancellationTokenãåŒæ°ã«åããšã
ã¯ã©ã€ã¢ã³ããæ¥ç¶ãåã£ãæç¹ã§åŠçãæã¡åãã
ïŒHttpContext.RequestAbortedãèªåã§ãã€ã³ããããïŒã
- éåæã³ã³ãããŒã©ã䜿ã£ãŠã¿ã - ãã°ããéèš
http://blog.shibayan.jp/entry/20100715/1279204349 - ASP.NET MVC 4 ã®æ°æ©èœãã¿ã¹ã¯å¯Ÿå¿ã®éåæã³ã³ãããŒã©ã䜿ã - ãã°ããéèš
http://blog.shibayan.jp/entry/20111105/1320495813
ããã§ã¯ãB å±€ã¯ã©ã¹ã§ã¯ãªãã
ãB å±€ã¯ã©ã¹ãè¿ã View ã«æž¡ããã
Entity, Bean, POCO çãªã¯ã©ã¹ïŒViewModelïŒã
ã«ã€ããŠèª¬æããã
Controller ãã View ã«ããŒã¿ãæž¡ããšãã«äœ¿çšããå ¥ãç©çãªã¢ãã
- åè
- ViewData vs ViewBag vs TempData - å€ã«ãªã£ããå¯ã
http://kyabatalian.hatenablog.com/entry/2015/12/05/232504
- ViewData vs ViewBag vs TempData - å€ã«ãªã£ããå¯ã
- ViewBag 㯠dynamic objectã
- ViewData 㯠Dictionaryã
-
TempData 㯠Dictionaryã
-
TempData ã¯ä¿æãããããããªãã€ã¬ã¯ãå ã«å€ãæž¡ããããšããªã©ã«äœ¿ãã
-
TempData ã®è©³ããåäœã¯ã以äžãåèã«ãªãã
- ASP.NET MVC TempData ã¯"次ã®ãªã¯ãšã¹ã"以éãåç
§ã§ãã - miso_soup3 Blog
http://miso-soup3.hateblo.jp/entry/2013/12/14/070356
- ASP.NET MVC TempData ã¯"次ã®ãªã¯ãšã¹ã"以éãåç
§ã§ãã - miso_soup3 Blog
è£è¶³ïŒ3 ã€ã®é¢ä¿ãšã䜿ãã¹ãã§ãªãçç±ïŒ: å®äœãšããŠã¯ã
ViewBag ⊠ViewData ã® dynamic ã©ãããŒïŒåãç©ãèŠãŠããïŒ ViewData ⊠ViewDataDictionaryïŒstring â objectïŒ TempData ⊠ITempDataDictionaryãã1 åèªããŸã§ãä¿æããã
çåç¯å² åå®å š ViewBag / ViewData åäžãªã¯ãšã¹ãå à å®è¡æãšã©ãŒ TempData 次ã®ãªã¯ãšã¹ããŸã§ïŒèªããšæ¶ããïŒ Ã ViewModelïŒ @modelïŒåäžãªã¯ãšã¹ãå â ã³ã³ãã€ã«æã«æ€åº åå㯠ViewModel ã䜿ãããšã
ViewBagã¯ã¿ã€ããã¹ãå®è¡æãŸã§åãããªãïŒdynamicã®ããïŒã
TempDataã®æ³šæç¹:
- ä¿åå ã ã»ãã·ã§ã³ ãŸã㯠Cookie
â ã»ãã·ã§ã³ãç¡å¹ã«ããŠãããšäœ¿ããªã- èªãã æç¹ã§æ¶ããïŒ
Peek()ãªãæ¶ããªããKeep()ã§ä¿æïŒ- ASP.NET Core ã§ã¯
[TempData]屿§ã§ããããã£ã«ä»ãããã[TempData] public string Message { get; set; }ãªãã€ã¬ã¯ãåŸã®ãç»é²ããŸããããšãã£ãã¡ãã»ãŒãžè¡šç€º
ïŒPost/Redirect/Get ãã¿ãŒã³ïŒãäž»çšéã§ããã
View ã¹ã¯ãªãããã匷ãåä»ãããã ViewModel ãåç §ããéã«äœ¿çšããã
- æ¬¡ã®æ§æ§æã䜿çšããŠããå Žåã¯ã
@inherits System.Web.Mvc.WebViewPage<ViewModelClass>
- æ¬¡ã®æ§æã«çœ®ãæããã
@model ViewModelClass
-
@model ããŒã¯ãŒãã§æå®ãã ViewModel ã«å¯ŸããŠã¯ãModel ããããã£ã§ã¢ã¯ã»ã¹ããã
- Controller ãã View ã« Model ãæž¡ãã
return View(vm);- View ã¹ã¯ãªããã§ Model ã䜿ãã
@Model.PropertyName
ç§»è¡ã¡ã¢ïŒèª€èšïŒ: åæã®ã@Model ViewModelãã¯ã
çŽåã®@model ViewModelClassïŒãã£ã¬ã¯ãã£ãïŒãš
æ··åããèšè¿°ãšå€æãã@Model.PropertyNameïŒããããã£åç §ïŒã«ä¿®æ£ããã
- ASP.NET MVC 3: Razorã®@modelæ°ããŒã¯ãŒãïŒCodeZineïŒã³ãŒããžã³ïŒ
https://codezine.jp/article/detail/5549- ScottGu's Blog - ASP.NET MVC 3: New @model keyword in Razor
https://weblogs.asp.net/scottgu/asp-net-mvc-3-new-model-directive-support-in-razor
- ScottGu's Blog - ASP.NET MVC 3: New @model keyword in Razor
View ã«ã¯ã
- ç»é¢å šäœã衚ããå šäœ Viewããšã
- ç»é¢ã®äžéšåã®ã¿ã衚ããéšå Viewããããã
Web ããŒãžã®ãã¥ãŒãšã³ãžã³ã«ã¯ä»¥äžã® 2 ã€ã®ãã®ãããã
åŸæ¥ã® ASP.NET ãšåæ§ã
åŒãã³ãŒããããã¯ã ã³ãŒãã»ãã²ããïŒ<% ïœ %>ïŒã§å²ãèšè¿°åœ¢åŒã
View ã®æ¡åŒµåããåŸæ¥ã® ASP.NET ãšåæ§ãã*.aspxãã§è¡šãããã
ASP.NET MVC 3 ã§ç»å Žãããã¥ãŒãšã³ãžã³ã
åŒãã³ãŒããããã¯ã®å
é ã«ã@ããä»äžããèšè¿°åœ¢åŒã§ã
åé·ãªã³ãŒãã»ãã²ããïŒ<% ïœ %>ïŒãäžèŠã«ãªãã
View ã®æ¡åŒµåã¯ãC# ã®å Žåã¯ã.cshtmlããVB ã®å Žåã¯ã.vbhtmlãã§è¡šãããã
è£è¶³ïŒçŸåšã¯ Razor ã®ã¿ïŒ: ASPX ãã¥ãŒãšã³ãžã³ã¯
ASP.NET Core MVC ã«ã¯ç§»æ€ãããªãã£ãã
çŸåšã®éžæè¢ã¯ RazorïŒ.cshtmlïŒã®ã¿ã§ããã
VB ã®.vbhtmlã ASP.NET Core ã§ã¯é察å¿
ïŒRazor 㯠C# ã®ã¿ïŒãRazor èªäœã¯ãã®åŸãçºå±ãã
æè¡ å 容 Razor Pages ããŒãžåäœïŒ .cshtml+.cshtml.csïŒãMVC ãã軜éRazor ã³ã³ããŒãã³ã BlazorïŒ .razorïŒRazor ã¯ã©ã¹ ã©ã€ãã©ãª ãã¥ãŒã NuGet ããã±ãŒãžã§é ã ãšãã£ã圢ã«åºãã£ãŠããã
- C# Razoræ§æ åºç€ææ³ ç·ãŸãšã ïŒ ïŒ IT
http://www.atmarkit.co.jp/fdotnet/rapidmaster/rapidmaster_03/rapidmaster_03.html - 第5åãæ°ãããã¥ãŒã»ãšã³ãžã³ãRazorãã®åºæ¬ãçè§£ããã ïŒ ïŒ IT
http://www.atmarkit.co.jp/fdotnet/aspnetmvc3/aspnetmvc3_06/aspnetmvc3_06_01.html - ASP.NET MVC 3 éçºå
¥é (12) - Razor ã®ææ³ - ãã°ããéèš
http://blog.shibayan.jp/entry/20110317/1300294985 - ASP.NET MVC ã®ãã¥ãŒã¯ ASPX ã§ã¯ãªã Razor ã
http://miso-soup3.hateblo.jp/entry/2013/12/02/030906
éåžžã® View ã¯ã³ã¬ã
éšå View ã¯ããPartial Viewããšããããã以äžã®çšéã§äœ¿ãããã
- ç»é¢ã®å
±éåã®ãã
ASP.NET ã®ãŠãŒã¶ãŒã³ã³ãããŒã«ã®ããã«ãå ±éçãªç»é¢ã³ã³ããŒãã³ããéšååããŠãããã®ã -
Ajax.BeginForm ã®éšåæŽæ°ã®ç¯å²ã衚ããã
Ajax.BeginForm ã䜿çšããéåæåŠçã®å Žåã
éšåæŽæ°ã®ç¯å²ãéšå View ã§å®çŸ©ããã
- /View/Shared/_XXXXPartial.cshtml
- /View/Controllerå/_XXXXPartial.cshtml (åªå )
- éåžž
@Html.Partial("_XXXXPartial", model)
- æ€çŽ¢æ©èœç¡ãïŒä»®æ³ãã¹ïŒ
@RenderPage("~/View/Controllerå/_XXXXPartial.cshtml", model)
- HTML æååãæ»ãããå¿çã¹ããªãŒã ã«çŽæ¥æžãåºãã
ViewDataDictionary ã®ç¬èªã®ã³ããŒãååŸããã®ã§ã芪㮠ViewData ã«ã¯åœ±é¿ãäžããªãã
@{ Html.RenderPartial("_XXXXPartial", model); }
- åè
- .net - Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction - Stack Overflow
http://stackoverflow.com/questions/5248183/html-partial-vs-html-renderpartial-html-action-vs-html-renderaction
- .net - Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction - Stack Overflow
è£è¶³ïŒASP.NET Core ã§ã¯
<partial>/@awaitïŒ:Html.Partialã¯
ASP.NET Core ã§ã¯éæšå¥šïŒåæå®è¡ã«ãããããããã¯ã®æãïŒã§ã
次ã®ããããã䜿ãã@* â ã¿ã° ãã«ããŒïŒæšå¥šïŒ *@ <partial name="_XXXXPartial" model="Model" /> @* â¡ éåæç *@ @await Html.PartialAsync("_XXXXPartial", Model) @{ await Html.RenderPartialAsync("_XXXXPartial", Model); }ããã«ããã¥ãŒ ã³ã³ããŒãã³ãïŒView ComponentïŒã
ãåã¢ã¯ã·ã§ã³ãã®åŸç¶ãšããŠçšæãããŠããïŒæ¬¡ç¯ãåç §ïŒã
- å Action Method ã®å®çŸ©
- å Action Method ã®å®çŸ©ã¯ãéšå View ãåºæããŒã¿ãå¿ èŠãšããå Žåã«è¿œå ããã
- éåžžãå šäœ View ãåŒã³åºã Controller ã«ãéšå View ã®å Action Method ã®å®çŸ©ã远å ããã
- Action Method ã®å®è¡ãéšå View ã®åŒã³åºãæã«éå®ããå Žåã
[ChildActionOnly] 屿§ã远å ããã - å Action Method ã ActionResult ãè¿ãå Žåã
PartialView() ãã«ããŒã»ã¡ãœããã䜿çšããã
[ChildActionOnly]
public ActionResult Current()
{
ã»ã»ã»
return PartialView("_XXXXPartial", partialViewModel);
}ç§»è¡ã¡ã¢ïŒèª€åïŒ: åæã®ãActionResult ãåž°ããã¯è¿ãã
ãPartialView() ãã«ããŒã»ã¡ãœãããã¯ãã«ããŒã®
èª€å€æãšå€æãä¿®æ£ããã
- å Action Method ã®åŒã³åºã
- éåžž
@Html.Action("XXXX", model)
- HTML æååãæ»ãããå¿çã¹ããªãŒã ã«çŽæ¥æžãåºãã
ViewDataDictionary ã®ç¬èªã®ã³ããŒãååŸããã®ã§ã芪㮠ViewData ã«ã¯åœ±é¿ãäžããªãã
@{ Html.RenderAction("XXXX", model); }
è£è¶³ïŒASP.NET Core ã§ã¯ãã¥ãŒ ã³ã³ããŒãã³ãïŒ:
Html.Action/
[ChildActionOnly]㯠ASP.NET Core ã«ã¯ç¡ãã
代ããã« ãã¥ãŒ ã³ã³ããŒãã³ãã䜿ããpublic class CartViewComponent : ViewComponent { private readonly ICartService _svc; // â DI ãå¹ã public CartViewComponent(ICartService svc) => _svc = svc; public async Task<IViewComponentResult> InvokeAsync() => View(await _svc.GetAsync()); }<vc:cart /> @* ãŸã㯠*@ @await Component.InvokeAsync("Cart")
åã¢ã¯ã·ã§ã³ïŒMVC 5ïŒ ãã¥ãŒ ã³ã³ããŒãã³ã å®äœ ã³ã³ãããŒã©ãŒã®ã¢ã¯ã·ã§ã³ å°çšã¯ã©ã¹ ã«ãŒãã£ã³ã° URL ããçŽæ¥åŒã¹ãŠããŸãïŒ [ChildActionOnly]ã§é²ãïŒåŒã¹ãªãïŒå®å šïŒ DI ãã«ãã ã³ã³ã¹ãã©ã¯ã¿æ³šå ¥ éåæ ãã«ãã asyncãèªç¶URL ããçŽæ¥å©ããŠããŸããšããåã¢ã¯ã·ã§ã³ã®åŒ±ç¹ã
æ§é çã«è§£æ¶ãããŠããç¹ã倧ããã
ïŒView ãã«ããŒãšããåŒç§°ãããããã ãã
ããã§ã¯ Html ãã«ããŒãšããåŒç§°ã«çµ±äžããïŒ
åŸæ¥ã® ASP.NET ã§ã¯ãASP.NET Web ã³ã³ãããŒã«ã䜿çšããŠã
ã©ãã«ãããã¹ãããã¯ã¹ãªã©ã®ã³ã³ãããŒã«ã衚瀺ããŠãããã
ASP.NET MVC ã§ã¯ãåºæ¬çã«ã以äžã®æ§ãªäŸ¿å©ãªæ©èœãå®è£
ãããŠãã
Html ãã«ããŒã䜿çšããã
- Html ãã«ããŒã¯ããµãã¿ã€ãžã³ã°åŠçãªã©ã忢±ããã
- ãŸããHtml ãã«ããŒã¯ãDataAnnotation ã®å 容ãå ã«è¡šç€ºå 容ãå¶åŸ¡ã§ããã
ASP.NET MVC ã§ã¯ãäž»ã«ä»¥äžã®ãã㪠Html ãã«ããŒã䜿çšã§ããã
- 衚瀺ã®ããã® Html ãã«ããŒ
| é çª | çšé | Html ãã«ã㌠|
|---|---|---|
| ïŒ | ããŒã¿ã®è¡šç€º | Html.DisplayFor |
| ïŒ | å ¥åå¯èœãªããŒã¿ã®è¡šç€º | Html.EditorFor |
| ïŒ | ã©ãã«ã®è¡šç€º1 | Html.DisplayNameFor |
| ïŒ | ã©ãã«ã®è¡šç€º2 | Html.LabelFor |
- HTML ã¿ã°ã«å¯Ÿå¿ãã Html ãã«ããŒ
| é çª | HTML ã¿ã° | Html ãã«ã㌠|
|---|---|---|
| ïŒ | ãã©ãŒã <form>
|
HTML.BeginForm ãŸã㯠Ajax.BeginForm |
| ïŒ | ãªã³ã¯ <a>
|
Html.ActionLink |
| ïŒ | ããã¹ãããã¯ã¹ <input type="text">
|
Html.TextBox ãŸã㯠Html.TextBoxFor |
| ïŒ | ããã¹ããšãªã¢ <textarea>
|
Html.TextArea ãŸã㯠Html.TextAreaFor |
| ïŒ | ãã¹ã¯ãŒã <input type="password">
|
Html.Password ãŸã㯠Html.PasswordFor |
| ïŒ | ãã§ãã¯ããã¯ã¹ <input type="checkbox">
|
Html.CheckBox ãŸã㯠Html.CheckBoxFor |
| ïŒ | ããããããŠã³ãªã¹ã <select>
|
Html.DropDownList ãŸã㯠Html.DropDownListFor |
| ïŒ | ãªã¹ãããã¯ã¹ <select>
|
Html.ListBox ãŸã㯠Html.ListBoxFor |
| ïŒ | ã©ãžãªãã¿ã³ <input type="radio">
|
Html.RadioButton ãŸã㯠Html.RadioButtonFor |
| 10 | é ããã£ãŒã«ã <input type="hidden">
|
Html.Hidden ãŸã㯠Html.HiddenFor |
- URL çæ
| é çª | çšé | Html ãã«ã㌠|
|---|---|---|
| ïŒ | ã~/...ããä»®æ³ãã¹ã«å€æ | Url.Content |
| ïŒ | ControllerãActionMethod åãªã©ããä»®æ³ãã¹ãçæ | Url.Action |
| ïŒ | RouteValueDictionary ããä»®æ³ãã¹ãçæ | Url.RouteUrl |
ç§»è¡ã¡ã¢ïŒè¡šã®èŠåºãïŒ: 1 ã€ç®ãš 3 ã€ç®ã®è¡šã¯
åæã®èŠåºãããHTMLã¿ã°ããšãªã£ãŠãããã
å 容ã HTML ã¿ã°ã§ã¯ãªããã**ãçšéã**ã«æ¹ããã
- ãªãããã¿ã³ãçæãã Html ãã«ããŒã¯ãªãããã
çŽæ¥<input type="button">ãŸãã¯<input type="submit">ãèšè¿°ããã
Html.xxxx ãš Html.xxxxFor ã® 2 çš®é¡ã® Html ãã«ããŒãããã
-
Html.xxxx
Model ãã View ãžã®åæ¹åãã€ã³ãã£ã³ã°ã
Html.TextBox("Category") ã®ããã«ã
ããããã£ãæååã§ãããæå®ããå Žåã¯ã
"For" ãã€ããªã Html ãã«ããŒã䜿çšããã -
Html.xxxxFor
Model â View ã®åæ¹åãã€ã³ãã£ã³ã°ã- ...For ãšããåç§°ã® Html ãã«ããŒã¯ãView ãš Model ã®éã§ã®
åæ¹åãã€ã³ãã£ã³ã°ãè¡ãã - Html.TextBoxFor(model => model.Category) ã®ããã«ã
ããããã£ãã©ã ãåŒã§ãããæå®ããå Žåã¯ã"For" ã§çµãã Html ãã«ããŒã䜿çšããã
- ...For ãšããåç§°ã® Html ãã«ããŒã¯ãView ãš Model ã®éã§ã®
ãã ããHTTP ãçµç±ããŠã®åæ¹åãã€ã³ãã£ã³ã°ã«ãªãã®ã§ã
åŠçæ¹åŒçã«ã¯ã以äžã®ãããªåŠçã·ãŒã±ã³ã¹ã«ãªãã
- POST æã«ãHtml.TextBoxFor ãªã©ãžã®å ¥åå€ããèªåçã« Model ã«åŸ©å ããã
- Controller ã¯ã埩å ããã Model ããæ å ±ãååŸããŠåŠçãè¡ãã
è£è¶³ïŒ
Forä»ãã䜿ãçç±ã¯åå®å šæ§ïŒ: åæãæãã
ãåæ¹åãã€ã³ãã£ã³ã°ãã«å ããã³ã³ãã€ã«æã«æ€åºã§ããç¹ã倧ããã@* æååæå®ïŒã¿ã€ããã¹ãå®è¡æãŸã§åãããªã *@ @Html.TextBox("Categoly") @* ã©ã ãåŒïŒã³ã³ãã€ã« ãšã©ãŒã«ãªã *@ @Html.TextBoxFor(m => m.Category)ASP.NET Core ã§ã¯ ã¿ã° ãã«ããŒãæšå¥šãããã
<input asp-for="Category" class="form-control" /> <label asp-for="Category"></label> <span asp-validation-for="Category"></span>HTML ã«è¿ãæžãæ¹ã®ãŸãŸãã€ã³ãã§ããããã
ãã¶ã€ããŒãšã®åæ¥ãããããããšããã®ãç§»è¡ã®äž»ãªåæ©ã§ããã
Html ãã«ã㌠ã¿ã° ãã«ã㌠èŠãç® C# ã®ã¡ãœããåŒã³åºã ã»ãŒ HTML 屿§ã®è¿œå å¿åãªããžã§ã¯ãïŒ new { @class = "..." }ïŒãã®ãŸãŸå±æ§ãæžã IntelliSense ãã ããïŒHTML è£å®ãå¹ãïŒ
ããããŒãããã¿ãŒããµã€ãã¡ãã¥ãŒãªã©ãã¢ããªã±ãŒã·ã§ã³ã§å
±éçã«è¡šç€ºããããå Žåã
ãã¹ã¿ãŒããŒãžã䜿çšããŠã¬ã€ã¢ãŠããå
±éåãããããšãã§ããã
ãã¹ã¿ãŒããŒãžã«ã¯ãç»é¢ããšã«åå¥å®è£
ãå¿
èŠãªç®æãå®çŸ©ããã
- ãã¥ãŒãšã³ãžã³ã ASPX ã®å Žåã¯ãåŸæ¥ã® ASP.NET ãšåæ§ ContentPlaceHolder ã䜿çšããã
- ãã¥ãŒãšã³ãžã³ã Razor ã®å Žåã¯ãRenderBody ã䜿çšããŠã¡ã€ã³ã®ã³ã³ãã³ãé åãå®çŸ©ããã
- ã¢ããªã±ãŒã·ã§ã³å
±é
- é
çœ®å Žæ
- /View/Shared/_Layout.cshtml
- äœ¿çšæ¹æ³
- /View/Shared/_ViewStart.cshtml ã® Layout ããããã£çµç±ã§åŒã³åºãããã
- é
çœ®å Žæ
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
- View åäœ
- é
çœ®å Žæ
- /View/Shared/_XXXXLayout.cshtml
- /View/Controllerå/_XXXXLayout.cshtml (åªå )
- äœ¿çšæ¹æ³
- é
çœ®å Žæ
ã¡ã€ã³ã®ã³ã³ãã³ãé å以å€ã«ãç»é¢ããšã«åå¥å®è£
ãå¿
èŠãªç®æãå®çŸ©ããå Žåã
RenderSection ã䜿çšããŠãã»ã¯ã·ã§ã³ããšåŒã°ãããµãã®ã³ã³ãã³ãé åãå®çŸ©ããã
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
<!-- ã¡ã€ã³ã®ã³ã³ãã³ãé åãæç»ããå Žæãå®çŸ© -->
@RenderBody()
@Scripts.Render("~/bundles/jquery")
<!-- ã»ã¯ã·ã§ã³ (ãµãã®ã³ã³ãã³ãé å) ãæç»ããå Žæãå®çŸ© -->
@RenderSection("scripts", required: false)
</body>
</html>- äŸãã°ãäžèšã®ããã«ãã¹ã¿ãŒããŒãžãå®çŸ©ããå Žåã
åã³ã³ãã³ãããŒãžã§ã¯ä»¥äžã®ããã«å®è£ ããã
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml"; // 䜿çšãããã¹ã¿ãŒããŒãžãæå®
}
@* ã¡ã€ã³ã®ã³ã³ãã³ãé å *@
<h2>Index</h2>
@* ã»ã¯ã·ã§ã³ (ãµãã®ã³ã³ãã³ãé å) *@
@section scripts{
<script type="text/javascript">
...
</script>
}
- äžèšã®ããã«ãã»ã¯ã·ã§ã³ãå®è£
ããå Žåã
- C# ã®å Žåã¯ã@section <ã»ã¯ã·ã§ã³å> { ïœ }ãã
- VB ã®å Žåã¯ã@Section <ã»ã¯ã·ã§ã³å> ïœ End Sectionã
ã§å²ãå¿ èŠãããã
- /View/Controllerå/YYYY.cshtml ã® Layout ããããã£çµç±ã§åŒã³åºãããã
@{
Layout = "~/Views/Shared/_XXXXLayout.cshtml";
}
@{
Layout = "~/View/Controllerå/_YYYYLayout.cshtml";
}
- Html ãã«ããŒã»ã¡ãœããã®ç¬¬äºåŒæ°ã« Layout ã¹ã¯ãªããåãæå®ããã
return View("YYYY", "_XXXXLayout");return View("YYYY", "_YYYYLayout");ç§»è¡ã¡ã¢ïŒèª€èšïŒ: åæã®
return View("YYYY, "_XXXXLayout");ã¯
åŒçšç¬Šã®äœçœ®ã誀ã£ãŠããããã
return View("YYYY", "_XXXXLayout");ã«ä¿®æ£ããã
- 以äžã® section ã§éžæããå Žåã
if æãªã©ã䜿çšããŠãLayout ããããã£ã«èšå®ãã *Layout.cshtml ãåãæ¿ããã
@{
Layout = "~/Views/Shared/_XXXXLayout.cshtml";
}
-
ActionResult ã§éžæããå Žåã
if æãªã©ã䜿çšããŠãreturn View() ã®ç¬¬äºåŒæ°ã«èšå®ããéšå View åãåãæ¿ããã -
RouteData ã§éžæããå Žåã以äžã®ããã«å®è£ ããã
if ((HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString() == "Account")
&& (HttpContext.Current.Request.RequestContext.RouteData.Values["Action"].ToString() == "Login"))
{
Layout = "~/Views/Shared/_Layout2.cshtml";
}
else
{
Layout = "~/Views/Shared/_Layout.cshtml";
}- åè
- Layout ã倿ŽããïŒçš®é¡ã®æ¹æ³ïŒASP.NET MVCïŒ - Jiro Laboratory
http://jirolabo.hatenablog.com/entry/2014/12/06/211528
- Layout ã倿ŽããïŒçš®é¡ã®æ¹æ³ïŒASP.NET MVCïŒ - Jiro Laboratory
BeginForm ã«ã¯ä»¥äžã® 2 ã€ã®ãã®ãããã
åŸæ¥ã® ASP ãªã©ã§ MVC æ¹åŒãæ¡çšããå Žåãšåããç»é¢å šäœãåæç»ããä»çµã¿ã
- ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹ã®åºŠã«ãç»é¢å šäœãåæç»ããã
-
ViewStateçžåœã®ç¶æ
ä¿ååŠçãç¬èªå®è£
ããå¿
èŠããã
ïŒFor ä»ãã® Html ãã«ããŒïŒHtml.xxxxForïŒã䜿çšããïŒã
@modelã«çœ®ãæããããã
View ã¹ã¯ãªãããã匷ãåä»ãããã ViewModel ãåç §ããéã«äœ¿çšããã
ãã¹ã¿ããŒãžãå©çšããéãå®çŸ©ããã section ãå®è£ ããã
View ã¹ã¯ãªããå ã«Html ãã«ããŒãå®çŸ©ã
è£è¶³:
@helper㯠ASP.NET Core ã® Razor ã§ã¯å»æ¢ãããã
代æ¿ã¯ ã¿ã° ãã«ããŒããã¥ãŒ ã³ã³ããŒãã³ãã
ãŸãã¯@functionså ã®ããŒã«ã«é¢æ°ã§ããã
- ã³ãŒããã²ããïŒã€ã³ã©ã€ã³åŒïŒ
åŒã®å€ã®åºå- éåžžã®ã³ãŒããã²ãã
@...
- æç€ºçãªã³ãŒããã²ãã
@(...)
- ã³ãŒããããã¯
- å€ã®ä»£å ¥
- ã¡ãœããåŒã³åºã
- ãªããžã§ã¯ãã®çæ
@{...}
-
å¶åŸ¡æ§æïŒãã¹ãå¯èœïŒ
if, switch, while, for/foreach- if
@if(...) {
ã»ã»ã»
}
else if (...) {
ã»ã»ã»
}
else {
ã»ã»ã»
}- switch
@switch (i)
{
case 0:
ã»ã»ã»
break;
case 1:
ã»ã»ã»
break;
ã»ã»ã»
default:
ã»ã»ã»
break;
}- while
@while (flg)
{
ã»ã»ã»
}- for
@for (var i = 0; i < 10; i++)
{
ã»ã»ã»
}- foreach
@foreach (var obj in list)
{
ã»ã»ã»
}- éçã³ã³ãã³ãå
- åäžè¡
@:
- è€æ°è¡
<text>ã»ã»ã»</text>- ã³ã¡ã³ã
- ãµãŒããŒã³ã¡ã³ã
@* ... *@
- HTML ã³ã¡ã³ã
<!-- ... -->è£è¶³ïŒRazor ã®èªåãšã¹ã±ãŒãïŒ: éèŠãªæ§è³ªãšããŠã
@ã«ããåºåã¯èªåçã« HTML ãšã¹ã±ãŒããããã@Model.Name @* ãšã¹ã±ãŒããããïŒå®å šïŒ *@ @Html.Raw(Model.Html) @* ãšã¹ã±ãŒããããªãïŒXSS ã«æ³šæïŒ *@
@Html.Rawã䜿ãç®æã¯ãå¿ ãå ¥åå ã確èªããããšã
åæããHtml ãã«ããŒã¯ãµãã¿ã€ãžã³ã°åŠçãªã©ã忢±ããããš
è¿°ã¹ãŠããã®ã¯ããã®èªåãšã¹ã±ãŒããæããŠããã
ASP.NET MVC ã®ãã³ãã¬ãŒãã¯ãã°ã«ãŒãã³ã°ãç®çã«ã
æ¢å®ã§ä»¥äžã®ãã©ã«ãæ§æãšãªã£ãŠããã
ããããã®ãã©ã«ãã«ã¯ã以äžã®ããã«ãã¡ã€ã«ãé
眮ããããšãæšå¥šãããŠããã
| é çª | ãã©ã«ãå | é 眮ããããã¡ã€ã« | åè |
|---|---|---|---|
| ïŒ | App_Start | èµ·åæã«ãåæèšå®ãè¡ãã¢ãžã¥ãŒã« | - |
| ïŒ | Contents | CSS | BundleConfig ã䜿çšããŠãããããæ¢å®ã® CSS ãã¡ã€ã«ã¯å€æŽããªã |
| ïŒ | Controllers | Controller | - |
| ïŒ | Models | Model | - |
| ïŒ | Scripts | JavaScript | BundleConfig ã䜿çšããŠãããããæ¢å®ã® JavaScript ãã¡ã€ã«ã¯å€æŽããªã |
| ïŒ | Views | View | 察å¿ãã Controller åã®ãã©ã«ã以äžã«ãView ã®ãã¡ã€ã«ãé
眮ãã äŸ Views\(ã³ã³ãããŒã©ãŒå)\Index.cshtml |
è£è¶³ïŒASP.NET Core ã®æ¢å®æ§æïŒ: 倧ããå€ãã£ãŠããã
ASP.NET MVC 5 ASP.NET Core App_Start\*.csProgram.csã«éçŽContent/Scriptswwwroot\ïŒéçãã¡ã€ã«ã®å ¬éã«ãŒãïŒGlobal.asaxç¡ã Web.configappsettings.jsonïŒ.NET Core configïŒControllers / Models / Views åãïŒãŸãã¯ãã£ãŒãã£ãŒåäœã«åå²ïŒ
wwwrootã®å°å ¥ã倧ããªéãã§ã
**ãããã«çœ®ãããã®ã ããå ¬éãããã**ãšããæç€ºçãªå¢çãã§ãã
ïŒASP.NET ã§ã¯éã«ãå ¬éããããªããã®ãå¡ããèšèšã ã£ãïŒã
Area (åºå) ãšã¯ãASP.NET MVC ã¢ããªã±ãŒã·ã§ã³ãè«ççã«åå²ããä»çµã¿ã®ããšã§ããã
(ASP.NET MVC ãããžã§ã¯ããã·ã¹ãã å
šäœãšãããšã
Area ããšã«ãµãã·ã¹ãã (ã®ãããªãã®) ã«åå²ã§ããã
App_Start ã®ãããã«ãŒãã远å ããããããªæãããšçè§£ãããšåããããããããããªã)
è£è¶³ïŒArea ã¯çŸåšã䜿ããïŒ: ASP.NET Core ã§ã Area ã¯å¥åšã§ã
ã¢ãžã¥ã©ãŒ ã¢ããªã¹çãªåå²ã®ææ®µãšããŠäœ¿ãããAreas/ Admin/ Controllers/ Views/ Models/ Shop/ Controllers/ Views/ Models/[Area("Admin")] public class UsersController : Controller { }app.MapControllerRoute( name: "areas", pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");ãã ããèŠæš¡ã倧ãããªããªã
ã¯ã©ã¹ ã©ã€ãã©ãªïŒRazor ã¯ã©ã¹ ã©ã€ãã©ãªïŒã«åããæ¹ã
å¢çãæç¢ºã«ãªãããšããéžæè¢ããã
ïŒVSãœãªã¥ãŒã·ã§ã³ ãããžã§ã¯ãã®æ§ææ€èšïŒã
Tags: ç§»è¡, .NETéçº, ASP.NET, ASP.NET MVC