1

我正在使用 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>

我尝试使用搜索时遇到的问题:他没有找到网址(404(找不到页面)):{host}/api/NewsOverview/start?SearchTerm=test

我对 MVC 很陌生,所以我想念一些东西......

4

2 回答 2

0

我们在 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" });
  }
于 2014-03-07T20:08:47.907 回答
0

好的 ...

我通过阅读约翰·韦斯特的两次帖子发现了问题;)

http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2012/06/Use-JSON-and-MVC-to-Retrieve-Item-Data-with-the- Sitecore-ASPNET-CMS.aspx

App_Start 中的 RegisterRoutes.cs 不会注册路由,但您必须通过管道注册您的路由。

于 2014-03-05T11:00:00.467 回答