Sitecore 7 MVC 4 & Ajax Call
Я использую Sitecore 7.1 и проект MVC 4.
Я пытаюсь создать окно поиска, которое будет искать новости в корзине и возвращать результат в виде JSON.
Поэтому я прочитал это сообщение в блоге: http://keeplearningandsharing.wordpress.com/2013/12/13/sitecore-mvc-with-ajax/
и попробуйте сделать то же самое, но это не работает.
Что я сделал:
1) Я создал контроллер с именем NewsOverviewController, где я положил два метода
ActionResult Start() (HttpGet) which return my view with the searchbox
JsonResult Starts(InpurtParams) which perform the search
2) В sitecore я создал свой рендеринг контроллера и добавил к нему начало действия.
3) я регистрирую новый маршрут в RouteConfig.cs (я поставил его до маршрута sitecore и после, ничего не менял)
routes.MapRoute(
name: "search",
url: "api/NewsOverview/{action}/{id}",
defaults: new { controller = "NewsOverview", action = "Starts", id = UrlParameter.Optional }
);
4) Я поставил следующий код на мой взгляд:
<script>
function getSearchResult() {
var inputparams = {};
inputparams.SearchTerm = document.getElementById("searchTerm").value;
try {
$.getJSON("/api/NewsOverview/starts", inputparams, displaySearchResult);
}
catch (ex) {
alert("Error : " + ex.message);
}
}
function displaySearchResult(data) {
$.each(data, function (i, result) {
$("#searchresult").append(result.Name + " - " + result.Url + "<br/>");
});
};
</script>
<div>
<input type="text" name="searchTerm" id="searchTerm" value="test"/>
<input type="button" onclick="getSearchResult();"/>
<div id="searchresult"></div>
</div>
Моя проблема, когда я пытаюсь использовать поиск: он не нашел URL (404 (страница не найдена)): {host}/api/NewsOverview/start?SearchTerm=test
Я довольно новичок в MVC, поэтому я скучаю по чему-то...
2 ответа
Хорошо...
Я нашел проблему, прочитав еще два раза пост от Джона Уэста;)
RegisterRoutes.cs в App_Start не регистрирует маршруты, но вы должны зарегистрировать свои маршруты через конвейеры.
Мы регистрируем маршруты в событии Application_Start, а не в каких-либо конвейерах. Это хорошо работает для нас.
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
private void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("NameOfRoute", "Path To Use from Ajax", new { controller = "Controller Class,Assembly", action = "Name Of Method On Controller" });
}