ããããã¹ã¯åšäœã®çãããããã«ã¡ã¯ã ãã®ãµã€ãã¯ãåäžããŒãžã®ajaxã¢ããªã±ãŒã·ã§ã³ãäœæããåé¡ã
ç¹°ãè¿ãæèµ·ããŠããŸãã ç§ã¯ãã°ããåã«ãã®ä»äºã«çŽé¢ããŸããã ãããããªã
html5ã®æ©èœãšMVCã®ãã¯ãŒãæã£ãŠããã®ãã
æåã§ãããã«ã¯jsã䜿çšããŠãéåžžã«å€ãã®ããšãæžãå¿
èŠããã£ãã®ã ããããšæããŸããã
ãããããASP.NET MVCã®æ©èœã«åºã¥ããç°¡åãªãœãªã¥ãŒã·ã§ã³ãäœæããããã«ä¿ããã®ã¯ãjsèšèªã«å¯Ÿããæµæ
[holywar = on] [holywar = off]ã§ããã 次ã«ã1ããŒãžã®Ajaxã¢ããªã±ãŒã·ã§ã³ãäœæããããšãããšãã«çºçããåé¡ã«ã€ããŠè©³ãã説æããã¹ãããããšã«å®å
šãªãœãªã¥ãŒã·ã§ã³ã®äœæãæ€èšããŸãã
é¢çœããªã£ãã-ã«ããããŠãã ããïŒã³ãŒããšåçãæ·»ä»ãããŠããŸãïŒã
ãã®ãããæšæºã®MVC 3ãã³ãã¬ãŒãã¢ããªã±ãŒã·ã§ã³ãè©ŠããŠãäžå³ã®ããã«ããããžã§ã¯ãã®æ§æãååŸããããã«äžèŠãªãã®ããã¹ãŠåé€ããããŠã³ããŒãã®æ®µéçãªå®è£
ãéå§ããŸãã

ã¹ããŒãž1-åé¡åæ
Ajax.ActionLinkã«åããŠäŒã£ããšããç§ã¯èããŸãã-ããïŒ ãã£ãšç°¡åãªããšã¯ããã®æ¹æ³ã§ã¢ããªã±ãŒã·ã§ã³å
šäœãå®è£
ããããšã§ãïŒ ããŒãžãã³ãã¬ãŒãïŒ_Layout.cshtmlïŒã®ã¡ã€ã³ãããã¯ãã¡ã€ã³ãšããŠèå¥ããä»ã®ãã¹ãŠã®ããŒãžãããŒãããŸãã ãã ããããã«åé¡ãçºçããŸãã
- ãŠãŒã¶ãŒã¯æ°ããããŒãžã«ç§»åãããæ»ãããã¿ã³ã§åã®ããŒãžã«æ»ãããšãæåŸ
ããŠããŸãããããã¯èµ·ãããŸããããŠãŒã¶ãŒã¯åã®ããŒãžã§ã¯ãªããæåã«å®å
šã«ããŒããããããŒãžã«æ»ããŸãã é²ããã¿ã³ãæ©èœããŸããã
- ãŠãŒã¶ãŒãæ°ããããŒãžã«åãæ¿ããŠãïŒããšãã°ãF5ã䜿çšããŠïŒæŽæ°ãããããçŸåšã®ããŒãžãæŽæ°ãã代ããã«ãæåã«å®å
šã«ããŒããããããŒãžãå床ããŒããããŸãã
- ãŠãŒã¶ãŒãæ°ããã¿ã/ãŠã£ã³ããŠã§æ°ããããŒãžãžã®ãªã³ã¯ãéããŸããã ãã ããéåžžã®ããŒãžãéã代ããã«ãã¡ã€ã³ãã³ãã¬ãŒããã¹ã¿ã€ã«ãããã³ã¹ã¯ãªãããªãã§PartialViewãèªã¿èŸŒãŸããŸãã
- ãŠãŒã¶ãŒã¯ãµã€ãã®ããŒãžã«ç®ãéããæ°ãæ£ã£ãŠãã¿ãïŒãŠã£ã³ããŠïŒã®ååã§ä»¥åã«äœæ¥ããããŒãžãèŠã€ããããšèããŸããã ãã ããããŒãžã®ååã¯_Layout.cshtmlã«ãããããããã²ãŒã·ã§ã³ããã»ã¹äžãå€æŽãããŠããŸããã
- ããã²ãŒã·ã§ã³ããæ°ãããããŸãã ãŠãŒã¶ãŒã¯å¿
èŠãªããŒã¿å
¥åããŒãžã«ç§»åããŸãããã... ajaxã«ãã£ãŠè¿ãããããŒãžã®ããŒã¿ã®ã¯ã©ã€ã¢ã³ãåŽæ€èšŒã¯æ©èœããŸããïŒ
- ãããŠä»ããŠãŒã¶ãŒã¯ãªã³ã¯ããã©ããããŒã¿ããŒã¹ãã100500件ã®ã¬ã³ãŒããåŒãåºãããããã«å¯ŸããŠæäœãå®è¡ããŸãã ãã®åŸã圌ã¯åããªã³ã¯ãããäžåºŠã¯ãªãã¯ããŸããããäœããåã³æ©èœããªããªã£ãããšå€æããããã§ãã ãããŠåã³ã ãããŠãã®åŸããŠãŒã¶ãŒãããããã¹ãŠã®ãªã¯ãšã¹ãã®çµäºãåŸ
ããªãã£ãæ¹ãè¯ãã§ããããããã¯ããŒãžã§èµ·ããå§ããŸã... =ïŒ
ããªãã®æ°ã®åé¡ããããŸããã ãããŠããããã®ãã¹ãŠãåçŽãªjsã³ãŒãã§è§£æ±ºãããããã§ã¯ãããŸããã ããã§ã¯ãã¢ãŒããã¯ãã£ãžã®çµ±åã¢ãããŒããå¿
èŠã§ãã ãããããªããããã«ããã«ããã€ãã®èŠä»¶ãè¿œå ããŸãïŒ
- æ°ããããŒãžãèªã¿èŸŒããšãã«ãçŸåšã®ããŒãžãåã«ãããã¯ãããã·ã¹ãã ã§äœãèµ·ãã£ãŠãããã«ã€ããŠã®ã¡ãã»ãŒãžããŠãŒã¶ãŒã«è¡šç€ºããããšä»®å®ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãéåžžã®ãã«ãããŒãžã¢ãŒãã§åäœãããã®ããã«ãå±¥æŽã®ããã²ãŒã·ã§ã³ãã·ã³ãã«ãã€çŽæçã«ããŸãããã
- ç§ãèšã£ãããã«ãç§ã¯jsã奜ãã§ã¯ãããŸããã ã³ãŒãã®æ倧éãcïŒã§èšè¿°ããŠã¿ãŸãããã ãŸããjsã§ã¯çŽ10è¡ã®ã¿ãèšè¿°ããŸãã
æçµçã«æ¡çšãããæè¡çå¶éïŒ
- html5ãããã䜿çšããŸãã
- ã¬ã€ã¢ãŠããšãã¶ã€ã³ã¯æ±ããŸããã ããŒã¿ã«ãé©åã«æ©èœãããã ãã§ãã
- ããŒã¿ã«ãè€éã«ããå Žåããœãªã¥ãŒã·ã§ã³ã¯ã§ããéãã·ã³ãã«ã«ããå¿
èŠããããŸãã ããã«ãšãªã¢ã®ãµããŒããçµã¿èŸŒã¿ãæ©èœã®äž»èŠéšåã¯Ajax / Htmlãã«ããŒã§ã¬ã³ããªã³ã°ãããŸãã
- ãœãªã¥ãŒã·ã§ã³ãç°¡çŽ åããããã«ãããã€ãã®éæ³ã®åœåèŠåãæ¡çšããŸãã ãããã®å¥çŽã«ã€ããŠã¯åŸã§èª¬æããŸãã
åé¡ãèšè¿°ãããç®æšãèšå®ãããŸãããè¡ããŸãããïŒ
ã¹ããŒãž2-ã³ã³ãããŒã©ãŒã®å®è£
ã³ã³ãããŒã©ãŒããå§ããŸãããã æããã«ãajaxã䜿çšããŠããŒãžã®äž¡æ¹ã®éšåãšããŒãžãå®å
šã«ããŒãããã«ã¯ïŒãŠãŒã¶ãŒããªã³ã¯ãçŽæ¥ã¯ãªãã¯ããããããŒãžãæŽæ°ããå ŽåïŒãPartialViewResultãšViewResultã®äž¡æ¹ãè¿ãã¢ã¯ã·ã§ã³ãå¿
èŠã§ãã
ãããã£ãŠãè«çã¢ã¯ã·ã§ã³ããšã«2ã€ã®ç©çã¢ã¯ã·ã§ã³ãã³ã³ãããŒã©ãŒã«é
眮ããŸãã1ã€ã¯
SomeActionã¿ã€ãã
ãã 1ã€ã¯
ViewResult ã
ãã 1ã€ã¯
AjaxSomeActionïŒPartialViewResultã§ãã ãã®å Žåã®
Ajaxãã¬ãã£ãã¯ã¹ã¯ãæåã®éæ³ã®åœåèŠåã§ãã ãã®äºå®ãå¿ããªãã§ãã ããã
åèšïŒ
public class HomeController : Controller { private Object GenerateIndexPage() { Object model = null; for (int i = 0; i < 1000000000; i++) { } return model; } [HttpGet] public ViewResult Index() { return View("Index", GenerateIndexPage()); } [HttpGet] public PartialViewResult AjaxIndex() { return PartialView("Index", GenerateIndexPage()); } [HttpGet] public ViewResult About() { return View("About"); } [HttpGet] public PartialViewResult AjaxAbout() { return PartialView("About"); } }
GenerateIndexPageïŒïŒã¡ãœããã¯ããã®ãããªç°¡åãªæ¹æ³ã§ãããšãã°ããŒã¿ããŒã¹ãžã®ã¢ã¯ã»ã¹ãªã©ãããã€ãã®é·ãæäœããšãã¥ã¬ãŒãããŸãã
ã¹ããŒãž3-_Layout.cshtml
ããã§ã¯ãäžè¬çãªãã³ãã¬ãŒããèŠãŠã¿ãŸãããã 圌ã®ã³ãŒããããã«åŒçšããŸãã
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title> AjaxNavigation</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript")></script> <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript")></script> <script src="@Url.Content("~/Scripts/ajaxnavigation.js")" type="text/javascript")></script> </head> <body> <div id="loadLayout" style="display: none; position: fixed; z-index: 20; top: 0px; left: 0px; width: 100% !important; height: 100% !important;"> <div style="margin-left: -24px; margin-top: -24px; position: relative; top: 50%; left: 50%; z-index: 20;"> <div id="loadMessage"> </div> <div> <img src="@Url.Content("~/Content/progress.gif")" alt="..." /> </div> </div> </div> <div class="page"> <header> <nav> <ul id="menu"> <li>@Ajax.ActionLinkTo(" ", "Index", "Home", "", " ...")</li> <li>@Ajax.ActionLinkTo(" ", "About", "Home", "", " ...")</li> </ul> </nav> </header> <div id="main"> @RenderBody() </div> </div> </body> </html>
ãã®ããããŸããjqueryã©ã€ãã©ãªãå«ããŸãã Ajaxããã²ãŒã·ã§ã³äžã®æåãªããŒãã§äžå¿
èŠãªåé¡ãçºçããªãããã«ãäžåºŠã«ãã¹ãŠãããŠã³ããŒãããŸãã
å
ã»ã©è¿°ã¹ãããã«ã
ajaxnavigation.jsã¹ã¯ãªãããããã«èšè¿°ãããšããã®ãã¡ã€ã«ã¯10è¡çšåºŠã®éåžžã«å°ããªã³ãŒãã«ãªããŸãã
ããŒãžã¿ã€ãã«ã«ã¯éåžžã«å
·äœçãªã³ã³ãã³ãïŒã¢ããªã±ãŒã·ã§ã³ã®ååïŒããããŸãã ååãšããŠã空ã®ãŸãŸã«ããŠããããšãã§ããŸã-ããŒãžãæåã§ããŒãããããã³ã«jsã䜿çšããŠå²ãåœãŠãŸãã
loadLayoutããã³
loadMessageèŠçŽ 㯠ãèªã¿èŸŒã¿ããã»ã¹ã衚瀺ããããã«å®çŸ©ãããŸãã èŠçŽ èªäœã¯ããŠãŒã¶ãŒãæ°ããããŒãžã®èªã¿èŸŒã¿äžã«ååŸã§ããªãå Žæãã¯ãªãã¯ã§ããªãããã«èšèšãããŠããŸãã
mainãšããååã®ãããã¯ã«ã¯ãããŒãžã®æ¬æãçŽæ¥å«ãŸããŠããŸãã ajaxã䜿çšããŠæŽæ°ããã®ã¯ãã®ã³ã³ãã³ãã§ãã ã¡ã€ã³ãããã¯ã«ã¯ãåã®2ã€ã®ãããã¯ïŒloadLayoutãšloadMessageïŒãšãšãã«ãããžãã¯åããããŸããåŸã§äœ¿çšããŸãã
Ajax.ActionLinkToïŒ...ïŒã¯ãé¢é£ãããã¹ãŠã®ãã©ã¡ãŒã¿ãŒãæã€ãªã³ã¯ãäœæããŸãã 以äžã§è©³çŽ°ã«æ€èšããŸãã
ã¹ããŒãž4-Ajax.ActionLinkToïŒ...ïŒ
ãã®ãã«ããŒã¯ãæšæºã®
Ajax.ActionLinkïŒ...ïŒã«å¯Ÿããå°ããªæ¡åŒµ
ã§ã ïŒ
public static class AjaxHelpers {
ãã«ããŒã¯ãšãªã¢ãèæ
®ããŠ
å¿
èŠãªã«ãŒããäœæããŸãïŒ
çµå±ãéåžžã«å€ãã®å®éã®ãããžã§ã¯ãã«ã¯ãšãªã¢ããããŸãïŒãããããã¢ã¯ã·ã§ã³ãšã³ã³ãããŒã©ãŒãšäžç·ã«èšå®ããããšã¯éåžžã«äŸ¿å©ã§ããã ããŒãžãajaxã§ããã²ãŒããããšãã«ãã©ãŠã¶ãŒã®ã¢ãã¬ã¹ããŒã«æ¿å
¥ãããããããã³ããã²ãŒã·ã§ã³ã®å±¥æŽãä¿æããããã«ããã®ã«ãŒããå¿
èŠã«ãªããŸãã
AjaxOptionsãªããžã§ã¯ãã¯ãã¡ã€ã³ãããã¯ã®æ¬äœãåä¿¡ããã³ã³ãã³ãã§çœ®ãæãã2ã€ã®jsæ©èœãå®è¡ããŸãïŒè©³çŽ°ã¯åŸã»ã©ïŒã
- changeLoadMesage-æ°ããããŒãžã®èªã¿èŸŒã¿ããã»ã¹äžã«ãŠãŒã¶ãŒã«è¡šç€ºãããããã¹ããå€æŽããŸãã
- onPageLoaded-ããŒãžã®èªã¿èŸŒã¿ãæåããåŸã«åŒã³åºãããã¢ãã¬ã¹ããŒãšå±¥æŽã«é¢é£ããããã€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
å®éããã«ããŒãåŒã³åºãããšãã«ã¢ã¯ã·ã§ã³åã
Index / AboutãšããŠæå®ããå Žåã§ãããã«ããŒã¯äžèšã®
Ajaxãã¬ãã£ãã¯ã¹ã眮ãæããAjaxãªã¯ãšã¹ãã察象ãšããã¢ã¯ã·ã§ã³ãæ£ç¢ºã«åŒã³åºãããšã«æ³šæããŠãã ããã
AjaxIndex / AjaxAbout ã
ã¹ããŒãž5-ããžãã¯ã¹ã¯ãªããajaxnavigation.js
ã¹ã¯ãªããã«ã¯3ã€ã®é¢æ°ããå«ãŸããŠããŸããã ãŸããèµ·åæã«è¡šç€ºãããç¢æãå€æŽããåºæ¬æ©èœïŒ
次ã«ãããŒãžã®äžéšãèªã¿èŸŒãã åŸã«åŒã³åºãããé¢æ°ïŒ
ãŸãããã©ãŠã¶è¡ã§ãã®URLã眮ãæããããã«ãããŒããããããŒãžã®URLãååŸããé²èŠ§å±¥æŽã«ä¿åããå¿
èŠããããŸãã ãããè¡ãããã«ãé衚瀺ã®pageUrlãããã¯ãåããŒãžã«é
眮ãããŸãã ããŒãžãžã®ãªã³ã¯ãååŸããåŸãæ°ããç¶æ
ããŠã£ã³ããŠç¶æ
ã¹ã¿ãã¯ã«è¿œå ããã³ãŒãã¯ãŒãã
ajax ãã§ããŒã¯ããŸãã ããã¯ãå±¥æŽãããã²ãŒããããšãïŒãŠãŒã¶ãŒãååŸã«çªããšãïŒã«ãã©ãŠã¶ãŒã«åŒ·å¶ã³ãã³ããäžããŠããŒãžããªããŒãããããã«è¡ãããŸãã
ãŸããããŒãžã¿ã€ãã«ãå€æŽããçµã¿èŸŒã¿ã®ã¯ã©ã€ã¢ã³ãæ€èšŒãæŽæ°ããå¿
èŠããããŸãã
3çªç®ã®é¢æ°ã¯ãããŒãžãããŒãããããšãã«åŒã³åºãããŸãã
ãŸããããã¥ã¡ã³ãã®ã¿ã€ãã«ãå€æŽããã¹ããŒãªãŒããç¶æ
ãããŠã³ããŒãããããã«ãµãã¹ã¯ã©ã€ãããŸãã ç¶æ
ãã
ajax ããšããŠããŒã¯ãããŠããå ŽåãããŒãžããªããŒãããŸããããã§ãªãå Žåã¯ãåŸç¶ã®ãªããŒãã®ããã«ãã®æ¹æ³ã§ããŒã¯ããŸãã
ã¹ããŒãž6-ãã¬ãŒã³ããŒã·ã§ã³ãšHtml.PageInfo
ãã®å Žåã®å
žåçãªè¡šçŸã¯æ¬¡ã®ããã«ãªããŸãã
@Html.PageInfo(" ","/Home/Index") <h2>Home</h2> <p> Home page </p>
Html.PageInfoïŒ...ïŒãã«ããŒã¯ãããã¥ã¡ã³ãã®ã¿ã€ãã«ãšçŸåšã®ããŒãžãžã®ãªã³ã¯ãæã€é衚瀺ã®ãããã¯ãè¿œå ããŸãã åã«èŠãããã«ããããã®é ããããããã¯ã¯ã¹ã¯ãªããã§äœ¿çšãããŸãã ãã«ããŒã¯éåžžã«ç°¡åã§ãïŒ
public static class HtmlHelpers {
ã¹ããŒãž7-äžéãµããªãŒ
ããã§ã
web.config Viewsãã©ã«ããŒã«äœæãããhtml / ajaxãã«ããŒãæ¥ç¶ããããšãå¿ããã«ãã¢ããªã±ãŒã·ã§ã³ãèµ·åã§ããŸãã
<system.web.webPages.razor> ... <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> <add namespace="AjaxNavigation.Core"/> </namespaces> </pages> </system.web.webPages.razor>
ãã®ã·ãŒã±ã³ã¹ã§ã¢ããªã±ãŒã·ã§ã³ããã°ãããã¹ãã§ããŸããã¹ã¯ãªãŒã³ã·ã§ããã§èª¬æããŸããã
- ããŠã³ããŒãããŒãž/ããŒã /ã€ã³ããã¯ã¹;
- Aboutãªã³ã¯ã/ Home / AjaxAboutããŒãžã«ã€ãªããããšã確èªããŠãã ããã
- ãªã³ã¯ããã©ããajaxã䜿çšããŠããŒããããããšã確èªããŸãããªã³ã¯/ Home / Aboutãã¢ãã¬ã¹ããŒã«è¡šç€ºãããŸãã
- ã¢ã¯ã·ã§ã³/ããŒã / AjaxIndexãæãã€ã³ããã¯ã¹ãªã³ã¯ã«åŸã£ãŠãã ããã
- é·æéã®æäœäžã«ã¡ãã»ãŒãžã衚瀺ãããä»ã®ãªã³ã¯ããã©ãããšãã§ããªãããšã確èªããŠãã ããã
- ã€ã³ããã¯ã¹ããŒãžãèªã¿èŸŒãã åŸãã¹ããŒãªãŒãä¿æãããããã²ãŒã·ã§ã³ãå©çšã§ããããšã確èªããŸãïŒãæ»ããããã³ãé²ããïŒã
- ããŒãžã«ç§»åããåŸãããŒãžã®æŽæ°ãæ£ããæ©èœããããšã確èªããŠãã ããã



1ã€ã®æ害ãªåé¡ãæ®ã£ãŠããŸãã æ°ããã¿ã/ãŠã£ã³ããŠã§ãªã³ã¯ãéããŠããŸã æ©èœããŸããã

ã¹ããŒãž8ãšæåŸ-æ°ããã¿ãã§éã...
åé¡ãäœã§ããããç解ããŠã¿ãŸãããã æããã«ããã©ãŠã¶ãæ°ããã¿ãã§
/ Home / AjaxIndexãªã³ã¯ãéãããšãããšãajaxã¯å®è¡ãããŸããã ãã®å ŽåãããŒãžã®äžéšã ãã§ãªããããŒãžã®å®å
šãªè¡šçŸãè¿ãå¿
èŠããããŸãã ãããããã©ãŠã¶ãæ°ãããŠã£ã³ããŠãéããããšã確èªããæ¹æ³ã¯ïŒ
ãã®ããã«ã¯ãããçš®ã®èšºæããŒã«ãå¿
èŠã§ããéåžžã«ã·ã³ãã«ã§é«éãªãã©ãã£ãã¯ã¢ãã©ã€ã¶ãŒã§ãã
Fiddlerã䜿çšããŠããŸãã èµ·åãããã©ãŠã¶ããµãŒããŒã«éä¿¡ãã2ã€ã®ãªã¯ãšã¹ããæ¯èŒããŸãã
- éåžžã®ãªã³ã¯ãã¯ãªãã¯äžã«
- æ°ãããŠã£ã³ããŠã§ãªã³ã¯ãéãããšãããšã


å®éã®Ajaxãªã¯ãšã¹ãã®å Žåããã©ãŠã¶ãŒã
X-Requested-WithããããŒãæ·»ä»ããããšã¯æããã§ãã éšåçãªããŒãžããå®å
šãªããŒãžã«ãªãã€ã¬ã¯ãããçä¿¡ãªã¯ãšã¹ãã®ãã£ã«ã¿ãŒãèšè¿°ããããšã¯æ®ã£ãŠããŸãã
ããã«èšã£ãŠãã£ãïŒ
public abstract class ControllerBase : Controller { protected override void Execute(RequestContext requestContext) {
ã³ã³ãããŒã©ãŒã® ãã¹ãŠã ControllerBaseããç¶æ¿ããããšãå¿ããªãã§ãã ããã
ãœãŒã¹ã³ãŒããšäŸ¿å©ãªãªã³ã¯
ifolder.ruãŸãã¯
zalil.ruãæå®ã§ããŸãã
ãæž
èŽããããšãããããŸããïŒ è¯ãã³ãŒãã£ã³ã°ã