Проверка автозаполнения Javascript - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть веб-страница с двумя полями TextBoxFor, которые используют автозаполнение Javascript.С одним из полей, ClientUser, ответ включает в себя целое число и строку.Затем целое число сравнивается с другим целочисленным полем на странице, ClientID, и, если они совпадают, строка используется в предложениях автозаполнения.Ответ другого поля, WorkmateUser, представляет собой список строк, который можно сразу же использовать в автозаполнении.

Контроллер получает удар и возвращает правильный общий список, затем выбирается правильный URL / поле, нуждающееся в проверке, но этот список требуетвалидация не определена для поля автозаполнения ClientUser, нуждающегося в валидации.Каков наиболее эффективный способ сравнения целочисленного поля на странице с целым числом, возвращаемым для списка автозаполнения?Заранее спасибо!

Бритва:

<div class="row">
    <div class="col-lg-12">
        @Html.LabelFor(m => m.WorkmateUser, "Workmate To Add", new { @class = "control-label" })
        @Html.TextBoxFor(m => m.WorkmateUser, new { data_autocomplete_url = Url.Action("GetWorkmates"), @class = "form-control" })
    </div>
</div>
<div class="row">
    <div class="col-lg-8">
        @Html.LabelFor(m => m.ClientID, "Firm To Include", "--Choose Firm--")
        @Html.DropDownListFor(m => m.ClientID, StaticCache.GetClients(Model.UserID), new { @class = "form-control" })
    </div>
</div>
<div class="row">
    <div class="col-lg-8">
        @Html.LabelFor(m => m.ClientUser, "Client To Add", new { @class = "control-label" })
        @Html.TextBoxFor(m => m.ClientUser, new { data_autocomplete_url = Url.Action("GetAllClients"), @class = "form-control" })
    </div>
</div>

Javascript:

<script type="text/javascript" language="javascript">
    $(document).ready(function () {
        $('*[data-autocomplete-url]')
            .each(function () {
                var $url = $(this);
                $(this).autocomplete({
                    source: $(this).data("autocomplete-url"),
                    response: function (data) {
                        if ($(this).data("autocomplete-url") == "/Message/GetAllClients") {
                            var aList = [];
                            for (var i = 0; i < data.length; i++) {//data.length is undefined!!!
                                if (data[i].ClientID == $("#ClientID").val()) {
                                    aList.push(data[i].FirstName);
                                }
                            }
                            return bros;
                        }
                        else {
                            return data;
                        }
                    }
                });
            });
    });
</script>

1 Ответ

0 голосов
/ 27 февраля 2019

Возможно, это не самое элегантное решение, но в итоге я выделил вызов автозаполнения, требующий проверки, в свой собственный сценарий и передал дополнительную переменную в контроллер для проверки на бэкэнде.Следующие работы:

Сценарий:

<script>
    $(document).on('keyup', '#ClientUser', function () {
        var abID = $(this),
            cID = $("#ClientID").val(),
            cList = [];
        $.ajax({
            type: "GET",
            url: '@Url.Action("GetAllClients", "Message")',
            data: { term: abID.val(), clientID: cID },
            success: function (data) {
                for (var i = 0; i < data.length; i++) {
                    cList.push(data[i]);
                }
            },
            error: function () {
                alert("Client employeess could not be pulled.");
            }
        });
        abID.autocomplete({
            source: cList
        });
    });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...