Управление автозаполнением, вызывающее контроллер с нулевым значением

Я пытаюсь использовать элемент управления Kendo UI Autocomplete с фильтрацией сервера, но столкнулся с проблемой.

В то время как моя функция обратного вызова извлекает правильный текст из формы, она постоянно передает нуль методу контроллера. Я не вижу существенного отличия моего кода от примера кода. Я проверил, что вызывается JavaScript и вызывается нужный метод контроллера. Последний просто не получает значение от метода JavaScript.

Что мне не хватает?

.cshtml источник:

@(Html.Kendo().AutoComplete()
    .Name("CustomerIdAutocomplete")
    .DataTextField("CustomerId")
    .MinLength(3)
    .HtmlAttributes(new { style = "width:250px" })
    .DataSource(source => {
        source.Read(read =>
        {
            read.Action("AutocompleteCustomer", "Autocomplete")
                .Data("onAdditionalData");
        })
        .ServerFiltering(true);
    })
)

Javascript:

function onAdditionalData() {
    return {
        text: $("#CustomerIdAutocomplete").val()
    };
}

Метод контроллера:

public ActionResult AutocompleteCustomer(string term)
{
    InformixRepository informixRepository = new InformixRepository();
    IList<AutocompleteCustomer> customers = informixRepository.GetMatchingCustomerIds(term);
    return Json(customers, JsonRequestBehavior.AllowGet);
}

Метод репозитория:

public IList<AutocompleteCustomer> GetMatchingCustomerIds(string text)
{
    .... content omitted because "text" is already null at this point
}

person John Prideaux    schedule 02.06.2015    source источник
comment
Это код автозаполнения, который вы на самом деле используете? Источник данных указывает на AutocompleteCustomer вместо GetMatchingCustomerIds   -  person Nicholas    schedule 02.06.2015
comment
можете ли вы отобразить сообщение об ошибке вызова ajax   -  person Vinit Patel    schedule 02.06.2015
comment
@Николас - Хороший улов. Забыл, что я рефакторил код БД в репозиторий. Я добавил фактический метод контроллера, который по-прежнему вызывается с нулевым значением для текста каждый раз.   -  person John Prideaux    schedule 02.06.2015
comment
@VinitPatel Я получаю следующие сообщения в окне вывода VS: _ Исключение было выдано в строке 1819, столбец 4 в localhost:61193/Scripts/jquery-1.10.2.js 0x800a139e — ошибка выполнения JavaScript: SyntaxError _   -  person John Prideaux    schedule 02.06.2015


Ответы (1)


Это должно исправить это:

function onAdditionalData() {
    return {
        term: $("#CustomerIdAutocomplete").val()
    };
}

Что бы вы ни использовали в JavaScript, оно должно совпадать с вашим параметром действия, которое вы назвали term:

public ActionResult AutocompleteCustomer(string term)
{
    InformixRepository informixRepository = new InformixRepository();
    IList<AutocompleteCustomer> customers = informixRepository.GetMatchingCustomerIds(term);
    return Json(customers, JsonRequestBehavior.AllowGet);
}
person Nicholas    schedule 02.06.2015
comment
Клянусь, я смотрел это 1000 раз. Спасибо! - person John Prideaux; 03.06.2015