ãããããASP.NET MVCã®æ©èœã«åºã¥ããç°¡åãªãœãªã¥ãŒã·ã§ã³ãäœæããããã«ä¿ããã®ã¯ãjsèšèªã«å¯Ÿããæµæ[holywar = on] [holywar = off]ã§ããã 次ã«ã1ããŒãžã®Ajaxã¢ããªã±ãŒã·ã§ã³ãäœæããããšãããšãã«çºçããåé¡ã«ã€ããŠè©³ãã説æããã¹ãããããšã«å®å šãªãœãªã¥ãŒã·ã§ã³ã®äœæãæ€èšããŸãã
é¢çœããªã£ãã-ã«ããããŠãã ããïŒã³ãŒããšåçãæ·»ä»ãããŠããŸãïŒã
ãã®ãããæšæºã®MVC 3ãã³ãã¬ãŒãã¢ããªã±ãŒã·ã§ã³ãè©ŠããŠãäžå³ã®ããã«ããããžã§ã¯ãã®æ§æãååŸããããã«äžèŠãªãã®ããã¹ãŠåé€ããããŠã³ããŒãã®æ®µéçãªå®è£ ãéå§ããŸãã
![ç»å](http://hostingkartinok.com/image/01201110/08372ee34e7eb90412172602e099fc03.png)
ã¹ããŒãž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 { /// <summary> /// , Ajax main /// PartialView /// </summary> public static MvcHtmlString ActionLinkTo(this AjaxHelper ajaxHelper, String linkText, String actionName, String controllerName = null, String areaName = null, String loadMessage = null, Object routeValues = null, Object htmlAttributes = null) { // RouteValueDictionary routeValueDictionary = new RouteValueDictionary(routeValues); if (!String.IsNullOrEmpty(actionName) && !routeValueDictionary.ContainsKey("action")) { routeValueDictionary.Add("action", actionName); } if (!String.IsNullOrEmpty(controllerName) && !routeValueDictionary.ContainsKey("controller")) { routeValueDictionary.Add("controller", controllerName); } if (!routeValueDictionary.ContainsKey("area")) { if (!String.IsNullOrEmpty(areaName)) routeValueDictionary.Add("area", areaName); else routeValueDictionary.Add("area", ""); } // Ajax AjaxOptions ajaxOptions = new AjaxOptions() { UpdateTargetId = "main", InsertionMode = InsertionMode.Replace, HttpMethod = "GET", LoadingElementId = "loadLayout", OnBegin = "changeLoadMesage('" + loadMessage + "')", OnSuccess = "onPageLoaded()" }; // String ajaxActionName = "Ajax" + actionName; return ajaxHelper.ActionLink(linkText, ajaxActionName, null, routeValueDictionary, ajaxOptions, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); } }
ãã«ããŒã¯ãšãªã¢ãèæ ®ããŠå¿ èŠãªã«ãŒããäœæããŸãïŒ
AjaxOptionsãªããžã§ã¯ãã¯ãã¡ã€ã³ãããã¯ã®æ¬äœãåä¿¡ããã³ã³ãã³ãã§çœ®ãæãã2ã€ã®jsæ©èœãå®è¡ããŸãïŒè©³çŽ°ã¯åŸã»ã©ïŒã
- changeLoadMesage-æ°ããããŒãžã®èªã¿èŸŒã¿ããã»ã¹äžã«ãŠãŒã¶ãŒã«è¡šç€ºãããããã¹ããå€æŽããŸãã
- onPageLoaded-ããŒãžã®èªã¿èŸŒã¿ãæåããåŸã«åŒã³åºãããã¢ãã¬ã¹ããŒãšå±¥æŽã«é¢é£ããããã€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
å®éããã«ããŒãåŒã³åºãããšãã«ã¢ã¯ã·ã§ã³åãIndex / AboutãšããŠæå®ããå Žåã§ãããã«ããŒã¯äžèšã®Ajaxãã¬ãã£ãã¯ã¹ã眮ãæããAjaxãªã¯ãšã¹ãã察象ãšããã¢ã¯ã·ã§ã³ãæ£ç¢ºã«åŒã³åºãããšã«æ³šæããŠãã ããã AjaxIndex / AjaxAbout ã
ã¹ããŒãž5-ããžãã¯ã¹ã¯ãªããajaxnavigation.js
ã¹ã¯ãªããã«ã¯3ã€ã®é¢æ°ããå«ãŸããŠããŸããã ãŸããèµ·åæã«è¡šç€ºãããç¢æãå€æŽããåºæ¬æ©èœïŒ
// , Ajax function changeLoadMesage(message) { // $("#loadMessage").empty(); if (message != null) $("#loadMessage").append(message); }
次ã«ãããŒãžã®äžéšãèªã¿èŸŒãã åŸã«åŒã³åºãããé¢æ°ïŒ
// , Ajax function onPageLoaded() { // var url = $("#pageUrl").html().replace("&", "&"); window.history.pushState("ajax", document.title, url); // document.title = $("#pageTitle").html(); // $.validator.unobtrusive.parse($("#main")); }
ãŸãããã©ãŠã¶è¡ã§ãã®URLã眮ãæããããã«ãããŒããããããŒãžã®URLãååŸããé²èŠ§å±¥æŽã«ä¿åããå¿ èŠããããŸãã ãããè¡ãããã«ãé衚瀺ã®pageUrlãããã¯ãåããŒãžã«é 眮ãããŸãã ããŒãžãžã®ãªã³ã¯ãååŸããåŸãæ°ããç¶æ ããŠã£ã³ããŠç¶æ ã¹ã¿ãã¯ã«è¿œå ããã³ãŒãã¯ãŒãã ajax ãã§ããŒã¯ããŸãã ããã¯ãå±¥æŽãããã²ãŒããããšãïŒãŠãŒã¶ãŒãååŸã«çªããšãïŒã«ãã©ãŠã¶ãŒã«åŒ·å¶ã³ãã³ããäžããŠããŒãžããªããŒãããããã«è¡ãããŸãã
ãŸããããŒãžã¿ã€ãã«ãå€æŽããçµã¿èŸŒã¿ã®ã¯ã©ã€ã¢ã³ãæ€èšŒãæŽæ°ããå¿ èŠããããŸãã
3çªç®ã®é¢æ°ã¯ãããŒãžãããŒãããããšãã«åŒã³åºãããŸãã
// $(document).ready(function () { // window.onpopstate = function (event) { if (event.state == "ajax") window.location.reload(); else window.history.replaceState("ajax", document.title, window.location.href); event.preventDefault(); }; // document.title = $("#pageTitle").html(); });
ãŸããããã¥ã¡ã³ãã®ã¿ã€ãã«ãå€æŽããã¹ããŒãªãŒããç¶æ ãããŠã³ããŒãããããã«ãµãã¹ã¯ã©ã€ãããŸãã ç¶æ ãã ajax ããšããŠããŒã¯ãããŠããå ŽåãããŒãžããªããŒãããŸããããã§ãªãå Žåã¯ãåŸç¶ã®ãªããŒãã®ããã«ãã®æ¹æ³ã§ããŒã¯ããŸãã
ã¹ããŒãž6-ãã¬ãŒã³ããŒã·ã§ã³ãšHtml.PageInfo
ãã®å Žåã®å žåçãªè¡šçŸã¯æ¬¡ã®ããã«ãªããŸãã
@Html.PageInfo(" ","/Home/Index") <h2>Home</h2> <p> Home page </p>
Html.PageInfoïŒ...ïŒãã«ããŒã¯ãããã¥ã¡ã³ãã®ã¿ã€ãã«ãšçŸåšã®ããŒãžãžã®ãªã³ã¯ãæã€é衚瀺ã®ãããã¯ãè¿œå ããŸãã åã«èŠãããã«ããããã®é ããããããã¯ã¯ã¹ã¯ãªããã§äœ¿çšãããŸãã ãã«ããŒã¯éåžžã«ç°¡åã§ãïŒ
public static class HtmlHelpers { /// <summary> /// : /// 1) "pageTitle" - /// 2) "pageUrl" - /// </summary> public static MvcHtmlString PageInfo(this HtmlHelper helper, String title, String url) { // Create title TagBuilder pageTitle = new TagBuilder("div"); pageTitle.SetInnerText(" AjaxNavigation - " + title); pageTitle.MergeAttribute("id", "pageTitle"); pageTitle.MergeAttribute("style", "display: none;"); // Create url TagBuilder pageUrl = new TagBuilder("div"); pageUrl.SetInnerText(url); pageUrl.MergeAttribute("id", "pageUrl"); pageUrl.MergeAttribute("style", "display: none;"); return new MvcHtmlString(pageTitle.ToString(TagRenderMode.Normal) + pageUrl.ToString(TagRenderMode.Normal)); } }
ã¹ããŒãž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ãæãã€ã³ããã¯ã¹ãªã³ã¯ã«åŸã£ãŠãã ããã
- é·æéã®æäœäžã«ã¡ãã»ãŒãžã衚瀺ãããä»ã®ãªã³ã¯ããã©ãããšãã§ããªãããšã確èªããŠãã ããã
- ã€ã³ããã¯ã¹ããŒãžãèªã¿èŸŒãã åŸãã¹ããŒãªãŒãä¿æãããããã²ãŒã·ã§ã³ãå©çšã§ããããšã確èªããŸãïŒãæ»ããããã³ãé²ããïŒã
- ããŒãžã«ç§»åããåŸãããŒãžã®æŽæ°ãæ£ããæ©èœããããšã確èªããŠãã ããã
![ç»å](http://hostingkartinok.com/image/01201110/7ff7ae4a4fd740e35a0244ef997e3af5.png)
![ç»å](http://hostingkartinok.com/image/01201110/e1469053fb45b7a164c313cd24769254.png)
![ç»å](http://hostingkartinok.com/image/01201110/66a0500abc798eed03634e4d0979f894.png)
1ã€ã®æ害ãªåé¡ãæ®ã£ãŠããŸãã æ°ããã¿ã/ãŠã£ã³ããŠã§ãªã³ã¯ãéããŠããŸã æ©èœããŸããã
![ç»å](http://hostingkartinok.com/image/01201110/d74b729627ba2278200448ab77ffa2cf.png)
ã¹ããŒãž8ãšæåŸ-æ°ããã¿ãã§éã...
åé¡ãäœã§ããããç解ããŠã¿ãŸãããã æããã«ããã©ãŠã¶ãæ°ããã¿ãã§/ Home / AjaxIndexãªã³ã¯ãéãããšãããšãajaxã¯å®è¡ãããŸããã ãã®å ŽåãããŒãžã®äžéšã ãã§ãªããããŒãžã®å®å šãªè¡šçŸãè¿ãå¿ èŠããããŸãã ãããããã©ãŠã¶ãæ°ãããŠã£ã³ããŠãéããããšã確èªããæ¹æ³ã¯ïŒ
ãã®ããã«ã¯ãããçš®ã®èšºæããŒã«ãå¿ èŠã§ããéåžžã«ã·ã³ãã«ã§é«éãªãã©ãã£ãã¯ã¢ãã©ã€ã¶ãŒã§ããFiddlerã䜿çšããŠããŸãã èµ·åãããã©ãŠã¶ããµãŒããŒã«éä¿¡ãã2ã€ã®ãªã¯ãšã¹ããæ¯èŒããŸãã
- éåžžã®ãªã³ã¯ãã¯ãªãã¯äžã«
- æ°ãããŠã£ã³ããŠã§ãªã³ã¯ãéãããšãããšã
![ç»å](http://hostingkartinok.com/image/01201110/c85be8211c86f1c0bbb8fdbbb77961d8.png)
![ç»å](http://hostingkartinok.com/image/01201110/ba83e45a3800b8aea06ab7c9c287c469.png)
å®éã®Ajaxãªã¯ãšã¹ãã®å Žåããã©ãŠã¶ãŒãX-Requested-WithããããŒãæ·»ä»ããããšã¯æããã§ãã éšåçãªããŒãžããå®å šãªããŒãžã«ãªãã€ã¬ã¯ãããçä¿¡ãªã¯ãšã¹ãã®ãã£ã«ã¿ãŒãèšè¿°ããããšã¯æ®ã£ãŠããŸãã
ããã«èšã£ãŠãã£ãïŒ
public abstract class ControllerBase : Controller { protected override void Execute(RequestContext requestContext) { // Ajax{Something}, PartialView // , X-Requested-With, / // , , . Boolean isAjaxRequest = requestContext.HttpContext.Request.QueryString["X-Requested-With"] != null; Boolean urlRequestPartialView = requestContext.HttpContext.Request.RawUrl.ToLower().Contains("ajax"); if ((urlRequestPartialView) && (!isAjaxRequest)) { String newUrl = requestContext.HttpContext.Request.RawUrl.ToLower().Replace("ajax", ""); requestContext.HttpContext.Response.Redirect(newUrl); } base.Execute(requestContext); } }
ã³ã³ãããŒã©ãŒã®
ãœãŒã¹ã³ãŒããšäŸ¿å©ãªãªã³ã¯
ifolder.ruãŸãã¯zalil.ruãæå®ã§ããŸãã
- History APIããµããŒãããïŒããã³ãµããŒãããªãïŒ1ããŒãžã®ajaxã¢ããªã±ãŒã·ã§ã³ãäœæãã-habrahabr.ru/blogs/webdev/123972
- HTML5 History APIã®æŠèŠ-habrahabr.ru/blogs/javascript/123106
- VKontakteãšããŠAjaxã䜿çšããŠããŒãžãèªã¿èŸŒã-habrahabr.ru/blogs/javascript/128552
- å€ããã©ãŠã¶ã®ãµããŒã-plugins.jquery.com/project/history-js
- Ajaxããã²ãŒã·ã§ã³ã®èå³æ·±ãå®äŸã§ããããããå€ãã®ããšãåŠã³ãŸãã-www.asual.com/jquery/address/samples/tabs/#Overview
- ã¯ã©ã€ã¢ã³ãæ€èšŒã«ã€ããŠ-www.jasoncavett.com/2011/03/using-unobtrusive-jquery-validation.html
ãæž èŽããããšãããããŸããïŒ è¯ãã³ãŒãã£ã³ã°ã