Member 14164795 Ответов: 2

Ajax запрос в ASP.NET основные страницы бритвы - ничего не делать


Моя цель-динамически обновлять два поля каждый раз, когда происходит изменение выпадающего списка. В моем примере выпадающий список представляет собой список сотрудников, и мне нужно, чтобы поля группы/подгруппы обновлялись каждый раз, когда он меняется.

С помощью эта статья и другие, я пытаюсь вызвать созданный мной метод C#, который запускает 2 запроса linq и устанавливает результат в поля. Я убедился, что этот метод работает просто отлично. Это находится в разделе "Edit.cshtml.cs":
// Displays chosen employee's group and subgroup
public ActionResult OnPostSearchCurrGroup()
{
    var subgroupQuery = (from c in _context.ppcc_matrix
                         from e in _context.employees
                         from s in _context.subGroups
                         where c.employeesID == e.Id
                         where e.subGroupsID == s.Id
                         select s.subgrp_nm).FirstOrDefault();
    subGroups.subgrp_nm = subgroupQuery;

    var groupQuery = (from c in _context.ppcc_matrix
                      from e in _context.employees
                      from s in _context.subGroups
                      from g in _context.groups
                      where c.employeesID == e.Id
                      where e.subGroupsID == s.Id
                      where s.groupsID == g.Id
                      select g.grp_nm).FirstOrDefault();
    groups.grp_nm = groupQuery;

    return Page();
}


В моем файле "Edit.cshtml" у меня есть 3 поля:
<div class="form-group">
    <label asp-for="ppcc_matrix.employeesID" class="control-label"></label>
    <select asp-for="ppcc_matrix.employeesID" class="form-control" id="employee" asp-items="ViewBag.employeesID">
        <option disabled selected value="0" style="display:none">--select--</option>
    </select>
</div>
<div class="form-group">
    <label asp-for="groups.grp_nm" id="grptxt">Group</label>
    <input asp-for="groups.grp_nm" id="grpnm" class="form-control" disabled />
</div>
<div class="form-group">
    <label asp-for="subGroups.subgrp_nm" id="subgrptxt">SubGroup</label>
    <input asp-for="subGroups.subgrp_nm" id="subgrpnm" class="form-control" disabled />
</div>


а потом мой javascript:
<script language="javascript" type="text/javascript">
    var employee = document.getElementById('employee');
    employee.addEventListener('change', UpdateGroup);
    function UpdateGroup() {
        $.ajax({
            type: 'post',
            url: '/edit?handler=searchcurrgroup',
            contenttype: "application/json; charset=utf-8",
            datatype: 'json'
        })
    }
</script>


Проблема: он ничего не делает, когда я меняю поле сотрудника. Мой обработчик назван правильно, это метод onpost..
Он работает, если я устанавливаю его в качестве обработчика asp-страниц на кнопке, но, конечно, было бы более разумно использовать вызов ajax для автоматического отображения.

Что я уже пробовал:

Несколько статей такие как этот и код выше.

2 Ответов

Рейтинг:
1

MadMyche

Разница между образцами заключается в том, что вы возвращаете.

Последняя строка в вашем действии контроллера-это return Page();, который вернет простой результат страницы без каких-либо данных, передаваемых в него.

Последняя строка образцов-это все return new JsonResult(lstString); который вернет JsonResult, заполненный lstString модель как источник данных.

Итак, ваша задача будет состоять в том, чтобы выяснить, как получить результаты ваших 2 запросов в одну модель и передать их в соответствующую вернуть действие


Member 14164795

Спасибо. Я установил переменную "result", чтобы передать обе мои переменные в качестве JsonResult:
var result = new { subgroupQuery, groupQuery };
возврат нового JsonResult(result);

Мой следующий вопрос заключается в том, как теперь установить результат для полей моей группы и подгруппы в js/html? Статья, на которую я ссылаюсь, сбивает с толку.

Member 14164795

Вот что я попытался сделать:

var employee = document.getElementById('сотрудник');
employee.addEventListener('change', UpdateGroup);
функция UpdateGroup() {
$.Аякс({
тип: "почта",
url: '/edit?обработчик=searchcurrgroup',
contenttype: "application/json; charset=utf-8",
тип данных: 'json',
данные: '{}',
асинхронность: 'true',
успех: функция (данные) {
OnSuccessed(data.subGroup) {
document.getElementById('subgrpnm').append(subgroupQuery);
}
OnSuccessed(data.group) {
document.getElementById('grpnm').append(groupQuery);
}
}
})
}


И все же ничего не происходит

Рейтинг:
1

Member 12274397

Метод OnPostSearchCurrGroup() должен возвращать объект Json,следовательно, он должен иметь тип JsonResult вместо actionresult и должен возвращать новый JsonResult(lstString) вместо return Page().