Sunday, 29 September 2013

Autocomplete, problems with source link (MVC, Knockout)

Autocomplete, problems with source link (MVC, Knockout)

I have working autocomplete. My Search Method is situated in
HomeController, but I want to do some changes. I created api controller
named "Vacancy" and transfered Search method there but I can't make it
work: Status Code:404 Not Found (Search method doesn't even start). After
transfering all changes I've made is:
Changed source link in View:
autocomplete="@Url.Action("Search", "Vacancy")"
Changed Search Method:
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;
}
Please, help, why my Search method doesn't start? Below is my working code
without api controller:
View:
<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>
Script
$(":input[data-autocomplete]").each(function() {
$(this).autocomplete({ source:
$(this).attr("data-autocomplete")});
});
Search Method
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);
}

No comments:

Post a Comment