MS_ASPNETMVCModernization - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ãïŒASP.NET ã® ModernizationïŒ
ã³ãã©ã®å 容ããŸãšããã
- Modify template : Add the Startup class to template to correspond to the OWIN pipeline.
https://github.com/OpenTouryoProject/OpenTouryo/issues/198 - Modify template : Link Bootstrap and jQuery from the template.
https://github.com/OpenTouryoProject/OpenTouryo/issues/199 - Modify template : Correspond the JavaScript and CSS to bundle and minify, or to CDN.
https://github.com/OpenTouryoProject/OpenTouryo/issues/200 - Modify template : Maintenance of the master page.
https://github.com/OpenTouryoProject/OpenTouryo/issues/201
è£è¶³ïŒæ¬ããŒãžã®äœçœ®ä»ãïŒ: æ¬ããŒãžã¯
Open æ£æ¢ã®ãã³ãã¬ãŒããè¿ä»£åããéã®å®äœæ¥èšé²ã§ããã
察象㯠.NET Framework äžã® ASP.NET MVC 5ããè¿ä»£åã®å 容ïŒåœæïŒã â OWIN å â [OWINåæé ] â¡ Bootstrap / jQuery ã®ãªã³ã¯ ⢠Bundle & MinificationãCDN ãã©ãŒã«ãã㯠⣠ãã¹ã¿ ããŒãžïŒã¬ã€ã¢ãŠãïŒã®æŽå †Model Bindingãéåæã³ã³ãããŒã©ãŒã®æ¡çšâ ã»â€ ã¯çŸåšãæå¹ãªæ¹åã§ããïŒCore ãžã®åžç³ïŒã
â¡ã»â¢ ã¯ããã³ããšã³ãã®æœ®æµãå€ãã£ãããã
çŸåšã¯å¥ã®ææ®µãæ¡ãïŒåç¯ã§è£è¶³ããïŒã
ASP.NET ã® Modernization ãåç §ã
åºæ¬çãªäºé ã¯ãASP.NET ã® BundleConfig ãåç §ã
å¿ èŠã«å¿ããŠã远å ã® BundleConfig ãè¡ãã
å ±éé ã§ã€ã³ã¹ããŒã«ããããã±ãŒãžã«å ã以äžãã€ã³ã¹ããŒã«ããã
-
jQuery Validation Plugin ( MVC ã® Validation ã§äœ¿ã£ãŠãã )
-
æ¢åã®ãã©ãŒã ã®ããããã€ã³æ€èšŒãæäŸããã
ã¢ããªã±ãŒã·ã§ã³ã«åãããŠããããã«ã¹ã¿ãã€ãºãç°¡åã§ããã -
ã€ã³ã¹ããŒã«æ¹æ³
Install-Package jQuery.Validation
-
-
jQuery Unobtrusive Ajax
https://github.com/aspnet/jquery-ajax-unobtrusive-
å ¬åŒãµã€ãã«ãæ®ã©æ å ±ãç¡ãããAjax.BeginForm ãå®è¡ããã®ã«å¿ èŠãããã
-
ã€ã³ã¹ããŒã«æ¹æ³
Install-Package Microsoft.jQuery.Unobtrusive.Ajax
-
-
jQuery Unobtrusive Validation
https://github.com/aspnet/jquery-validation-unobtrusive-
å ¬åŒãµã€ãã«ãæ®ã©æ å ±ãç¡ãããAjax.BeginForm ã§ã® Validation ãå®è¡ããã®ã«å¿ èŠãããã
-
ã€ã³ã¹ããŒã«æ¹æ³
Install-Package Microsoft.jQuery.Unobtrusive.Validation
-
è£è¶³ïŒUnobtrusive ã®æå³ãšä»çµã¿ïŒ: ãå ¬åŒãµã€ãã«ãæ®ã©æ å ±ãç¡ãã
ãšããåæã®èгå¯ã¯æ£ãããåœæããè³æãä¹ããã£ãã
ä»çµã¿ãè£ã£ãŠããã**
UnobtrusiveïŒæ§ãããéäŸµå ¥çïŒ**ãšã¯ã
HTML ã« JavaScript ãçŽæ¥æžããªããšããèšèšæ¹éãæãã<!-- â ObtrusiveïŒHTML ã« JS ãæ··ããïŒ --> <input onblur="if(this.value=='') alert('å¿ é ã§ã');"> <!-- â UnobtrusiveïŒdata-* 屿§ã§ã¡ã¿æ å ±ã ãæãããïŒ --> <input name="Name" data-val="true" data-val-required="ååã¯å¿ é ã§ã" data-val-length-max="50"> <!-- â JS åŽããã®å±æ§ãèªãã§æ€èšŒãçµã¿ç«ãŠã -->ãåäœã®æµãïŒValidationïŒã â ViewModel ã«ããŒã¿æ³šéãä»ãã [Required(ErrorMessage="ååã¯å¿ é ã§ã")] public string Name { get; set; } â â¡ Html.TextBoxFor(m => m.Name) ã data-val-* 屿§ãåºå â ⢠jquery.validate.unobtrusive.js ã data-val-* ãèªã â ⣠jquery.validate.js ã«æ€èšŒã«ãŒã«ãšããŠç»é² â †ãã¯ã©ã€ã¢ã³ãåŽã§æ€èšŒããããïŒãµãŒãåŽã§ãåœç¶æ€èšŒãããïŒäŸåé¢ä¿ã®é åºãéèŠã§ããã
jquery.js â jquery.validate.js â jquery.validate.unobtrusive.js â ãã®é ã«èªã â é åºãééãããšãäœãèµ·ããªããïŒãšã©ãŒãåºãªãïŒ â [ASP.NET ã® BundleConfig] ã§ãé åºãæç€ºããããšè¿°ã¹ãçç±
Ajax.BeginFormãåãä»çµã¿ã§ããã<!-- Ajax.BeginForm ãåºåãã屿§ --> <form data-ajax="true" data-ajax-method="POST" data-ajax-update="#result" data-ajax-mode="replace"> <!-- â jquery.unobtrusive-ajax.js ããããèªãã§ Ajax éä¿¡ã«å€ãã -->ç§»è¡ã¡ã¢ïŒçŸåšã®ç¶æ³ïŒ:
ã©ã€ãã©ãª çŸæ³ jQuery Validation çŸåœ¹ãASP.NET Core ã§ã䜿ããã jquery-validation-unobtrusive çŸåœ¹ïŒ Microsoft.jQuery.Unobtrusive.ValidationïŒãCore ã®ãã³ãã¬ãŒãã«ãå ¥ãjquery-ajax-unobtrusive ASP.NET Core ã®ãã³ãã¬ãŒãããã¯å€ãã Ajax.BeginFormASP.NET Core ã«ã¯ååšããªã â
Ajax.BeginFormã®çŸåšã®ä»£æ¿:ã»ASP.NET Core MVC ⊠fetch API ãèªåã§æžã ã»Razor Pages ⊠åäž ã»Blazor ⊠ã³ã³ããŒãã³ãã®ã€ãã³ãã§å®çµ ã»htmx âŠ å±æ§é§åãšããç¹ã§ Unobtrusive Ajax ã®ææ³ã«è¿ã â<!-- htmxïŒUnobtrusive Ajax ã®çŸä»£çãšèšããïŒ --> <form hx-post="/api/save" hx-target="#result" hx-swap="innerHTML">ãHTML ã«å±æ§ãæžããš JS ãåãããšããçºæ³èªäœã¯
çŸåšãçããŠããââãšããç¹ã§ããã®ç¯ã®å 容ã¯
æè¡ã®å€é·ã远ãããã§ç€ºåçã§ããã
- BundleConfig ã远å ããã
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
// see : https://www.asp.net/ajax/cdn
string jqueryVersion = "3.1.1";
BundleTable.EnableOptimizations = true;
BundleTable.Bundles.UseCdn = true; // same as: bundles.UseCdn = true;
// ( new ScriptBundle("~/XXXX") ã®ãã¹ã¯å®åšããpathãšè¢«ããšRenderæã«ãã°ãã
// ãªã®ã§ãbundlesãšå®åšããªãpathãæå®ããŠããïŒCSSãåãbundlesã䜿çšããïŒã
bundles.Add(new ScriptBundle("~/bundles/app").Include(
"~/Scripts/app/Site.js"));
bundles.Add(new ScriptBundle("~/bundles/otr").Include(
"~/Scripts/otr/common.js",
"~/Scripts/otr/ie_key_event.js",
"~/Scripts/otr/else.js"));
bundles.Add(new ScriptBundle(
"~/bundles/jquery",
string.Format("//ajax.aspnetcdn.com/ajax/jquery/jquery-{0}.min.js", jqueryVersion))
{
CdnFallbackExpression = "window.jQuery"
}.Include(string.Format("~/Scripts/jquery-{0}.js", jqueryVersion)));
bundles.Add(new ScriptBundle(
"~/bundles/jqueryval",
"//ajax.aspnetcdn.com/ajax/jquery.validate/1.16.0/jquery.validate.min.js")
{
CdnFallbackExpression = "window.jQuery.validator"
}.Include("~/Scripts/jquery.validate.js"));
bundles.Add(new ScriptBundle(
"~/bundles/jqueryvaluno",
"//ajax.aspnetcdn.com/ajax/mvc/5.2.3/jquery.validate.unobtrusive.min.js")
{
CdnFallbackExpression = "window.jQuery.validator.unobtrusive"
}.Include("~/Scripts/jquery.validate.unobtrusive.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryunoajax").Include(
"~/Scripts/jquery.unobtrusive-ajax.js")); // CDNã§æäŸãããŠããªãã
// éçºãšåŠç¿ã«ã¯ãModernizr ã®éçºããŒãžã§ã³ã䜿çšããŸããæ¬¡ã«ãå®çšŒåã®æºåãã§ãããã
// http://modernizr.com ã«ãããã«ã ããŒã«ã䜿çšããŠãå¿
èŠãªãã¹ãã®ã¿ãéžæããŸãã
bundles.Add(new ScriptBundle(
"~/bundles/modernizr",
"//ajax.aspnetcdn.com/ajax/modernizr/modernizr-2.8.3.js") // min ç¡ã
{
CdnFallbackExpression = "window.Modernizr"
}.Include("~/Scripts/modernizr-*"));
bundles.Add(new ScriptBundle(
"~/bundles/bootstrap",
"//ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js")
{
CdnFallbackExpression = "window.jQuery.fn.modal"
}.Include("~/Scripts/bootstrap.js"));
bundles.Add(new ScriptBundle(
"~/bundles/respond",
"//ajax.aspnetcdn.com/ajax/respond/1.4.2/respond.min.js")
{
CdnFallbackExpression = "window.respond"
}.Include("~/Scripts/respond.js"));
bundles.Add(new StyleBundle("~/bundles/css").Include(
"~/Content/bootstrap.css",
"~/Content/themes/base/all.css",
"~/Content/themes/base/jquery-ui.css",
"~/Content/otr/Style.css",
"~/Content/app/Site.css"));
}
}è£è¶³ïŒãã®ã³ãŒãã®èªã¿ã©ããïŒ: å®åçãªå·¥å€«ãè©°ãŸã£ãŠããã®ã§ã
èŠç¹ãæŸã£ãŠãããâ
CdnFallbackExpressionã®å€ã®éžã³æ¹ã©ã€ãã©ãªããšã«ãèªã¿èŸŒããŠããã°å®çŸ©ãããã°ããŒãã«å€æ°ããæå®ãã jQuery â window.jQuery jQuery Validate â window.jQuery.validator jQuery Validate Unobtrusive â window.jQuery.validator.unobtrusive BootstrapïŒJSïŒ â window.jQuery.fn.modal â å·§ã Modernizr â window.Modernizr Respond.js â window.respondBootstrap ã®
window.jQuery.fn.modalãç¹ã«å·§ã¿ã§ã
Bootstrap ã¯ç¬èªã®ã°ããŒãã«å€æ°ãäœããªãããã
jQuery ãã©ã°ã€ã³ãšããŠç»é²ããã颿°ã®ååšã§å€å®ããŠãããâ¡
// CDN ã§æäŸãããŠããªãããšããã³ã¡ã³ã
jquery.unobtrusive-ajax.jsã ã CDN æå®ããªãã
å®éã« aspnetcdn ã§ã¯é ä¿¡ãããŠããªãã£ãããã§ã
調ã¹ãçµæãæ®ããŠããç¹ãæçšã§ãããâ¢
modernizr-*ãšããã¯ã€ã«ãã«ãŒã.Include("~/Scripts/modernizr-*") â ããŒãžã§ã³çªå·ãæžããã«æžã â ãã ããè€æ°ããããããšé åºãäžå®ãã«ãªãïŒ1 ã€ã ã眮ãããšïŒâ£
EnableOptimizations = trueãæç€ºããŠãã
debug="true"ã§ãæé©åãæå¹ã«ããããšããææè¡šç€ºã§ãã
ïŒASP.NET ã® BundleConfig ã®
ãæ¬çªçžåœã§æ€èšŒãããã«å¯Ÿå¿ããïŒãç§»è¡ã¡ã¢ïŒãã®ã³ãŒãã«å«ãŸããã©ã€ãã©ãªã®çŸæ³ïŒ:
ã©ã€ãã©ãª çŸæ³ jQuery 3.1.1 3.x ç³»ã¯çŸåœ¹ã ãã3.1.1 ã«ã¯æ¢ç¥ã®è匱æ§ïŒXSSïŒã3.5 以äžãž Bootstrap 3.3.7 ãµããŒãçµäºã5.x ãžïŒ4 ã§ jQuery äŸåãæžãã5 ã§äžèŠã«ïŒ Modernizr 2.8.3 çŸåšã¯ã»ãŒäžèŠïŒå¯Ÿè±¡ãã©ãŠã¶ãæ©èœãåããŠããããïŒ Respond.js äžèŠïŒIE8 ã® Media Query 察å¿çšãIE èªäœãçµäºïŒ ajax.aspnetcdn.comæäŸçµäºïŒMicrosoft Ajax CDN 㯠2022 幎ã«å»æ¢ïŒâ
ajax.aspnetcdn.comã®å»æ¢ã¯éèŠã§ããã
ãã®ã³ãŒãããã®ãŸãŸåãããšãCDN ã 404 ã«ãªãã
ãã©ãŒã«ããã¯ãæ¯åçºåããïŒåããé ãïŒã
æ¢åã¢ããªãä¿å®ããŠãããªããCDN æå®ãå€ããã
å¥ã® CDNïŒjsDelivrãcdnjsïŒã«å·®ãæ¿ããå¿ èŠãããã
ModernizrãšRespond.jsã¯åé€ããŠæ§ããªãã
IE ã®ãµããŒããçµäºããçŸåšãååšæçŸ©ããªãã
- BundleConfig ãåŒã³åºãã
public class Startup
{
public void Configuration(IAppBuilder app)
{
// ã¢ããªã±ãŒã·ã§ã³ã®èšå®æ¹æ³ã®è©³çްã«ã€ããŠã¯ãhttp://go.microsoft.com/fwlink/?LinkID=316888 ãåç
§ããŠãã ãã
// ã¢ããªã±ãŒã·ã§ã³ã®ã¹ã¿ãŒãã¢ããã§å®è¡ããã³ãŒãã§ã
//
AreaRegistration.RegisterAllAreas();
//
WebApiConfig.Register(GlobalConfiguration.Configuration);
// ã°ããŒãã«ãã£ã«ã¿ã®ç»é²
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
// URLã«ãŒãã£ã³ã°ã®ç»é²
RouteConfig.RegisterRoutes(RouteTable.Routes);
// ãã³ãã«ïŒãããã£ã±ãŒã·ã§ã³ã®ç»é²
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}è£è¶³ïŒStartup ãžå¯ãã圢ã«ãªã£ãŠããïŒ: OWINåæé ã®
ãGlobal.asax ããç§»åããŠãè¯ããå¿ èŠæ§ã¯ãªãããšããèšè¿°ã«å¯Ÿãã
ããã§ã¯å®éã« Startup ãžå¯ããŠãããããã®å€æã®å©ç¹ã èµ·åæã®åŠçã 1 ç®æã«éãŸã â ASP.NET Core ã® Program.cs / Startup.cs ã«è¿ã圢ã«ãªã â â ç§»è¡æã«å¯Ÿå¿é¢ä¿ãèŠããããASP.NET Core ã§ã®å¯Ÿå¿åœ¢:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(options => { options.Filters.Add<MyGlobalFilter>(); // â FilterConfig çžåœ }); var app = builder.Build(); app.UseStaticFiles(); // â BundleConfig çžåœã¯æ¶æ» app.UseRouting(); app.MapControllerRoute( // â RouteConfig çžåœ name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.MapControllers(); // â WebApiConfig çžåœ app.Run();
AreaRegistration.RegisterAllAreas()ã«çžåœãããã®ã¯ Core ã«ã¯ãªã
ïŒãšãªã¢ã¯å±æ§[Area("Admin")]ãšã«ãŒã ãã¿ãŒã³ã§è¡šçŸããïŒã
CDNãã©ãŒã«ããã¯
-
ASP.NET MVC ã® CDN ãã©ãŒã«ããã¯ã¯ã
ScriptBundle ã¯ã©ã¹ã§è¡ãªãã -
ASP.NET Web Forms ã§ã¯ãã³ã¬ã«å ããŠã
ScriptManager ã« CDN ãã©ãŒã«ããã¯æ©èœãããã -
ASP.NET MVC ã® CDN ãã©ãŒã«ããã¯ã®èšå®æ¹æ³ãªã©ã
詳ããã¯ãã³ãã©ãåç §ã
@* ãã¹ã¿ã»ããŒãžã«çžåœ *@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
@Styles.Render("~/bundles/css")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@RenderSection("HeaderSection", required: true)
</head>
<body onload="Fx_Document_OnLoad(); Fx_AdjustStyle();">
@RenderBody()
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/jqueryuno")
@Scripts.Render("~/bundles/otr")
@Scripts.Render("~/bundles/app")
@RenderSection("FooterSection", required: true)
</body>
</html>ç§»è¡ã¡ã¢ïŒãã³ãã«åã®äžäžèŽïŒ: ã¬ã€ã¢ãŠããåç §ããŠãã
~/bundles/jqueryunoã¯ã
BundleConfig åŽã®å®çŸ©ïŒ~/bundles/jqueryvaluno/
~/bundles/jqueryunoajaxïŒãšäžèŽããŠããªãããBundleConfig ã§å®çŸ©ãããŠãããã®ã ~/bundles/jqueryval ïŒjquery.validateïŒ ~/bundles/jqueryvaluno ïŒjquery.validate.unobtrusiveïŒ ~/bundles/jqueryunoajax ïŒjquery.unobtrusive-ajaxïŒ ãã¬ã€ã¢ãŠããåç §ããŠãããã®ã ~/bundles/jqueryval â ~/bundles/jqueryuno â â å®çŸ©ãããŠããªã
Scripts.Renderã¯ãååšããªããã³ãã«åãæž¡ããããš
ããããä»®æ³ãã¹ããšããŠ<script src="âŠ">ãåºåãã
ïŒäŸå€ã«ã¯ãªããªãïŒã
çµæã404 ã«ãªã<script>ã¿ã°ãåºåããããæå³ãšããŠã¯
~/bundles/jqueryvalunoãšèªãã
ïŒValidation ã® Unobtrusive ãæ¬ææ«å°Ÿã§èªã¿èŸŒãæ§æã®ããïŒããã®çš®ã®èª€ãã¯å®è¡ããŠãæ°ä»ãã«ãã
ïŒæ€èšŒãå¹ããªããªãã ãã§ããšã©ãŒã¯åºãªãïŒã
ãã©ãŠã¶ã®éçºè ããŒã«ã®ãããã¯ãŒã¯ ã¿ãã§ 404 ã確èªãã
ã®ã確å®ã§ããã
è£è¶³ïŒã¬ã€ã¢ãŠãã®çŸåšçãªæ¹åç¹ïŒ: ç§»è¡å ã®ããŒã¯ã¢ããã«ã¯ã
çŸåšãªãçŽãã¹ãç¹ãããã€ãããã<!-- â åæ --> <html> <body onload="Fx_Document_OnLoad(); Fx_AdjustStyle();"><!-- â çŸåš --> <html lang="ja"> <!-- â èšèªãæç€ºïŒèªã¿äžãã»ãã©ã³ãéžæã»SEOïŒ --> <body> ... <script> // â¡ onload 屿§ã§ã¯ãªããã¹ã¯ãªããåŽã§ç»é²ããïŒUnobtrusiveïŒ document.addEventListener('DOMContentLoaded', () => { Fx_Document_OnLoad(); Fx_AdjustStyle(); }); </script>
ç®æ æ¹å <html>lang="ja"ãä»ããïŒåœéå察å¿é ç®ïŒ<body onload>屿§ã« JS ãæžããªããCSP ãå°å ¥ãããšåããªããªã â <meta charset><head>ã®å é ã«çœ®ãïŒãšã³ã³ãŒãã£ã³ã°ïŒviewport <meta name="viewport">ããªãïŒã¬ã¹ãã³ã·ãã«å¿ èŠïŒrequired: trueã»ã¯ã·ã§ã³æªå®çŸ©ã®ãã¥ãŒã§ãšã©ãŒã«ãªãã required: falseã®æ¹ãæ±ãããã
onload屿§ã¯ CSPïŒContent Security PolicyïŒãšè¡çªããã
script-src 'self'ã®ãã㪠CSP ãèšå®ãããšã
ã€ã³ã©ã€ã³ ãã³ãã©ã¯å®è¡ãããªãã
ã»ãã¥ãªãã£åŒ·åãé²ãããªãã屿§ã® JS ã¯å¿ ãå€ã«åºãã
ASP.NET MVC ã§ã¯ãæ¢å®ã§èšå®ãã§ããŠããã
Model Binding ãéåæã³ã³ãããŒã©ãŒã䜿çšããããã«ä¿®æ£ããã
- Modify template : Modernization of the implementation of ActionMethod of MVC.
Issue #215 · OpenTouryoProject/OpenTouryo
https://github.com/OpenTouryoProject/OpenTouryo/issues/215
è£è¶³ïŒãã® 2 ç¹ãæãæ¬è³ªçãªè¿ä»£åïŒ: Bundle ã CDN ã¯
朮æµãšãšãã«å€ã³ãããModel Binding ãšéåæåã¯çŸåšãæ£ããæ¹åã§ãããâ Model Binding
// â å€ãæžãæ¹ïŒRequest ããçŽæ¥åãïŒ public ActionResult Save() { var name = Request.Form["Name"]; var price = decimal.Parse(Request.Form["Price"]); // äŸå€ã®å±éº ... } // â Model Binding [HttpPost] [ValidateAntiForgeryToken] public ActionResult Save(ProductEditViewModel model) { if (!ModelState.IsValid) return View(model); // æ€èšŒãèªå ... }ãåŸããããã®ã ã»å倿ãšãã®å€±æã®æ±ããèªå ã»ããŒã¿æ³šéã«ããæ€èšŒïŒã¯ã©ã€ã¢ã³ãã»ãµãŒãäž¡æ¹ïŒ ã»åäœãã¹ããæžããïŒåŒæ°ãæž¡ãã ãïŒ ã»[ASP.NET MVCã§DataTableã䜿çšããã] ã§è¿°ã¹ã ãåæ¹åãã€ã³ãã£ã³ã°ã«ã¯ POCO ãèŠãããšåã話⡠éåæã³ã³ãããŒã©ãŒ
// â åæïŒDB / API ãåŸ ã€éãã¹ã¬ãããå æããïŒ public ActionResult Index() { var data = _repository.GetAll(); return View(data); } // â éåæ public async Task<ActionResult> Index() { var data = await _repository.GetAllAsync(); return View(data); }ã广ã I/O åŸ ã¡ã®éããã¹ã¬ãããã¹ã¬ãã ããŒã«ã«è¿ãã â åææ¥ç¶æ°ã«å¯ŸããŠã¹ã¬ãããè¶³ãã â ã¹ã«ãŒããããäžããïŒã¬ã€ãã³ã·ã¯æ¹åããªãïŒâ ãæ³šæã ã».Result / .Wait() ãæ··ãããšããããããã¯ããã ã»ãå šéš async ã«ããã°éããªããããã§ã¯ãªã â CPU ããŠã³ããªåŠçã«ã¯å¹æããªã詳现㯠async/await ãåç §ã
ASP.NET Core ã§ã¯éåæãæ¢å®ã§ããã
åæçã® API ããããåãããŠããïŒStreamã®åæèªã¿æžãã
æ¢å®ã§çŠæ¢ãããçïŒã
ãã®æ¹åãžã®ä¿®æ£ã¯ãCore ç§»è¡ã®æºåãšããŠãæå¹ã§ããã
-
jQuery UI
- ASP.NET Razor Jqueryuiã®äœ¿ãæ¹ | Yutaka Hirata
http://rich.hrd.co.jp/asp-net-razor-jueryui%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/ - ã¯ã©ã€ã¢ã³ãåŽæ€èšŒã®ç¡å¹å
http://surferonwww.info/BlogEngine/post/2015/02/17/disable-client-side-validation-in-mvc4-internet-application.aspx
- ASP.NET Razor Jqueryuiã®äœ¿ãæ¹ | Yutaka Hirata
-
Ajax.BeginForm
- MVC5 Ajax.BeginForm()ãå©çšããããã®æé - Qiita
https://qiita.com/m-otoguro/items/1250015aed6907a8d9e7 - asp.net mvc 5 - Ajax.BeginForm doesn't fire AJAX script, falls back on postback - Stack Overflow
https://stackoverflow.com/questions/21831451/ajax-beginform-doesnt-fire-ajax-script-falls-back-on-postback
- MVC5 Ajax.BeginForm()ãå©çšããããã®æé - Qiita
CDNãã©ãŒã«ããã¯
ïŒASP.NET ã® Modernization ãåç §ïŒ
ã»ã»ã»
- ASP.NET Core ã§ã®ã¢ãã« ãã€ã³ã
https://learn.microsoft.com/ja-jp/aspnet/core/mvc/models/model-binding - ASP.NET Core MVC ã®ãã£ã«ã¿ãŒ
https://learn.microsoft.com/ja-jp/aspnet/core/mvc/controllers/filters - ã¯ã©ã€ã¢ã³ãåŽã®æ€èšŒïŒjQuery Unobtrusive ValidationïŒ
https://learn.microsoft.com/ja-jp/aspnet/core/mvc/models/validation
Tags: ç§»è¡, .NETéçº, ASP.NET, ASP.NET MVC, OWIN, NuGet