Member 14713380 Ответов: 1

Динамическая загрузка конкретных данных из базы данных


**Описание ситуации:**

У меня есть selectbox, я выбираю там человека (там я загружаю весь список сотрудников из базы данных). У меня есть еще два поля (я хотел бы ввести значения из других столбцов (той же строки) (данные этого сотрудника))



using AppEcp.Models;
using DevExtreme.AspNet.Data;
using DevExtreme.AspNet.Mvc;
using Microsoft.AspNetCore.Mvc;
using System.Linq;

namespace AppEcp.Controllers
{
    public class UzytkownicyController : Controller
    {
        private readonly UzytkownicyDbContext _uzytkownicyContext;

        public UzytkownicyController(UzytkownicyDbContext uzytkownicyContext)
        {
            _uzytkownicyContext = uzytkownicyContext;
        }

          public IActionResult GetItems(DataSourceLoadOptions loadOptions)
        {
            var GetMethod = _uzytkownicyContext.Uzytkownicy.Where(i => i.Firma == "Pekao Leasing").Select(i => new
            {
                i.Id,
                i.Nazwa,
                i.Departament,
                i.Login
            });

            return Json(DataSourceLoader.Load(GetMethod, loadOptions));
        }

        [HttpGet]
        public ActionResult GetDepartmentAndManager(string nazwaValue)
        {
            var danePracownika = _uzytkownicyContext.Uzytkownicy.Where(x => x.Nazwa == nazwaValue).Select(s => new 
            {
                UserDepartament = s.Departament,
                UserManager = s.Manager
            });

            return Json(danePracownika);
        }
    }
}


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

**Я пытался:**

**страница cshtml**
``` 
                          @(Html
                           .DevExtreme()
                           .SelectBox()
                           .ID("Id_name")
                           .DataSource(d => d
                               .Mvc()
                               .Controller("Uzytkownicy")
                               .Key("Id")
                               .LoadAction("GetItems")
                           )
                           .DisplayExpr("Nazwa")
                           .ValueExpr("Id")
                           .SearchEnabled(true)
                           .OnValueChanged("getDepAndMan")
                        )
                        @(Html.DevExtreme().TextBox()
                       .ID("Id_department"))

                        @(Html.DevExtreme().TextBox()
                           .ID("Id_manager"))


<script type="text/javascript">

    function getDepAndMan() {

        var nazwaValue = document.getElementById("Id_name").value;

        $.ajax({
             type: "GET",
             url: '@Url.Action("GetDepartmentAndManager", "Uzytkownicy")',
             contentType: 'application/json; charset=utf-8',
             data: { nazwaValue : nazwaValue},
             dataType: "json",
             success: function (data) {
                document.getElementById("Id_department").value = (data.UserDepartament);
                document.getElementById("Id_manager").value = (data.UserManager);
             },
             error: function () {
                alert("bad code noob");
             }
         });
    }
</script>


**Не сработать:**
Код не выдает ошибку, но и не вводит загруженные данные в текстовые поля

1 Ответов

Рейтинг:
1

Richard Deeming

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

В этом случае, я подозреваю, что вы получаете массив объектов обратно, где ваш код ожидает один объект:

success: function(data) {
    console.debug(data);
    /*
    Expected:
    { UserDepartment: "...", UserManager: "..." }
    
    Actual:
    [
        { UserDepartment: "...", UserManager: "..." }
    ]
    */
Чтобы исправить это, вам нужно изменить свое действие так, чтобы оно возвращало только одну запись:
[HttpGet]
public IActionResult GetDepartmentAndManager(string nazwaValue)
{
    // Find the first matching record:
    var danePracownika = _uzytkownicyContext.Uzytkownicy.FirstOrDefault(x => x.Nazwa == nazwaValue);
    
    // If there is no matching record, return a 404 error:
    if (danePracownika is null) return NotFound();
    
    // Otherwise, return the details of the record:
    return Json(new
    {
        UserDepartament = danePracownika.Departament,
        UserManager = danePracownika.Manager
    });
}


Member 14713380

Имя "s" не существует в текущем контексте

Richard Deeming

Исправлено:

return Json(new
{
    UserDepartament = danePracownika.Departament,
    UserManager = danePracownika.Manager
});