2016-04-26 78 views
1

我正试图在textbox上集成autocomplete。但这并不是按照action的方法从模型中获取数据。它抛出在控制台以下错误:文本框上的自动完成反馈404错误,未找到控制器/操作

http://localhost:56393/Api/AutoCompleteChannelName 404(未找到)

下面是.cshtml代码:

<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"> 

JavaScript的:

<script src="//code.jquery.com/jquery-1.10.2.js"></script> 

​​

输入标签:

<input id="channelName" class="form-control" value="" name="channelName" placeholder="Enter Channel Name To Filter" /> 

的ActionResult:

public JsonResult AutoCompleteChannelName(string term) 
    { 

     List<DIM_CHANNEL> obj = bc.DIM_CHANNEL.Where(m => m.CHANNEL_NAME.ToLower().Contains(term.ToLower())).Distinct().AsEnumerable().Select(i => new DIM_CHANNEL 
     { 
      ChannelName = i.CHANNEL_NAME, 
      ChannelKey = i.CHANNEL_KEY, 
     }).ToList(); 

     return Json(obj, JsonRequestBehavior.AllowGet); 
    } 

任何帮助将是非常赞赏。

+1

什么是控制器的类名其他什么吗? –

+1

使用Url的帮助程序方法:''url:'@ Url.Action(“ActionName”,“ControllerName”)''' –

+0

控制器是API并且操作方法是AutoCompleteChannelName – N2J

回答

1

首先,改变POSTGET。另外,您是否在您的WebApiConfig.cs中定义了WebAPI路由?

如果是这样,您可能需要删除该路由,或者你的控制器重命名为APIController

+1

我改变POST TO GET和更改控制器的名称,它的工作..所以高兴..谢谢:) – N2J

-1

你在jsonresult方法错过

[HttpGet] 

属性。

请参考下面的代码希望对你有用:

[HttpGet] 
    public JsonResult AutoCompleteChannelName(string term) 
     { 

      List<DIM_CHANNEL> obj = bc.DIM_CHANNEL.Where(m => m.CHANNEL_NAME.ToLower().Contains(term.ToLower())).Distinct().AsEnumerable().Select(i => new DIM_CHANNEL 
      { 
       ChannelName = i.CHANNEL_NAME, 
       ChannelKey = i.CHANNEL_KEY, 
      }).ToList(); 

      return Json(obj, JsonRequestBehavior.AllowGet); 
     } 

感谢

+0

据我所知,如果httpget不存在,它被视为默认的get方法方法。但我试着把httpget,但仍然没有触及该方法。 – N2J

+0

ok 然后请再试一次 删除 键入:“POST”, dataType:“json”, 从脚本中删除。 当然有帮助。 谢谢 –

+0

我改变了帖子类型来获取和更改控制器名称,它的工作原理..谢谢:) – N2J

1

更改您的Ajax调用的类型为GET

$.ajax({ 
      url: "/Api/AutoCompleteChannelName", 
      type: "GET", 
      dataType: "json", 
      data: { term: request.term }, 
      success: function (data) { 
       response($.map(data, function (item) { 
        return { 
         label: item.ChannelName, 

        }; 
       })) 
      } 
     })