【发布时间】:2013-09-29 08:43:16
【问题描述】:
我正在使用自动完成功能。我的搜索方法位于 HomeController 中,但我想做一些更改。我创建了名为“Vacancy”的 api 控制器并在那里转移了 Search 方法,但我无法使其工作:状态代码:404 Not Found(搜索方法甚至没有启动)。转移我所做的所有更改后:
已更改视图中的源链接:
data-autocomplete="@Url.Action("Search", "Vacancy")"
更改搜索方法:
public object Search(string term)
{
var vacancyHeaders =
new UnitOfWork().Repository<Vacancy>()
.Get()
.Where(v => v.Header.ToLower().Contains(term.ToLower()))
.Select(v => new { label = v.Header })
.Distinct()
.Take(10);
return vacancyHeaders;
}
请帮忙,为什么我的搜索方法没有启动? 以下是我没有 api 控制器的工作代码:
查看:
<form data-bind="submit: search">
<input data-bind="value: SearchArgument, valueUpdate: 'blur'" data-autocomplete="@Url.Action("Search", "Home")" class="form-text" name="search" size="32" maxlength="64" placeholder="Search"/>
<input type="submit" value="search" />
</form>
脚本
$(":input[data-autocomplete]").each(function() {
$(this).autocomplete({ source: $(this).attr("data-autocomplete")});
});
搜索方法
public ActionResult Search(string term)
{
var vacancyHeaders =
new UnitOfWork().Repository<Vacancy>()
.Get()
.Where(v => v.Header.ToLower().Contains(term.ToLower()))
.Select(v => new { label = v.Header })
.Distinct()
.Take(10);
return Json(vacancyHeaders, JsonRequestBehavior.AllowGet);
}
【问题讨论】:
-
也许尝试将 [HttpPost] 标头添加到您的搜索方法中?
-
Norbert Pisz,谢谢,但仍然找不到状态代码:404 ((((
-
你确定post请求的签名匹配action方法吗?我最好的猜测是您没有在请求中传递 term 变量。
-
您是否检查过 firebug 或 chrome 开发工具中的 POST 尝试?它尝试执行 POST 的确切 URL 是什么?此外,您的数据编码是否正确,即 urlencoding 与 json。它在期待什么?如果您甚至无法到达路线,则可以从一些好地方开始调试。
标签: jquery asp.net-mvc knockout.js autocomplete