Считывание возвращаемых значений из контроллера AJAX / ASP. NET Обновление NEW - PullRequest
1 голос
/ 08 февраля 2020
  • вызывается с помощью selectbox go в функцию 'getDepAndMan ()',

  • есть значение, взятое из окна выбора (работает)

  • вызывает функции в контроллере 'GetDepartmentAndManager' (работает)

  • контроллер возвращает значение (работает)

    {Microsoft.EntityFrameworkCore .Query.Internal.EntityQueryable <<> f__AnonymousType6 <'string, string >>}

    Просмотр результатов: [0] {UserDepartament = "здесь есть значение / строка", UserManager = "здесь есть значение / строка "}

  • должна go вернуться к ajax и вызвать 'succes: function (данные сотрудника)' (works)

  • должен присвоить значения полям (не работает)

  • показать предупреждение (работа)

  • показать предупреждение с значения (не работает, показать предупреждение с: undefined undefined)

Просмотр:

@(Html
     .DevExtreme()
     .SelectBox()
     .DataSource(d => d
          .Mvc()
      )
     .OnValueChanged("getDepAndMan")
  )
 @(Html.DevExtreme().TextBox()
      .ID("Id_department")
      .ReadOnly(true)
  )
 @(Html.DevExtreme().TextBox()
      .ID("Id_manager")
      .ReadOnly(true)
  )

<script type="text/javascript">

    function getDepAndMan() {


        var userId = {
           nazwaValueId: $("#idName").dxSelectBox("instance").option("value")
        };

        $.ajax({

            url: "@Url.Action("GetDepartmentAndManager", "Uzytkownicy")",
            type: "POST",
            dataType: "json",
            data: {"userId": JSON.stringify(userId)},
            cache: false,
            success: function (danePracownika) {
                  $("#Id_department")
                     .dxTextBox("instance")
                     .option("value", danePracownika.UserDepartament);
                 $("#Id_manager")
                     .dxTextBox("instance")
                    .option("value", danePracownika.UserManager);

                alert(danePracownika.UserDepartament + " " + danePracownika.UserManager);
            },
            failure: function (error) {
                alert(error);

            },
            error: function (error) {
                alert(error);
            }
        });
    }
</script>


Контроллер:

[HttpPost]
public ActionResult GetDepartmentAndManager(string userId) 
{

  dynamic serializer = JsonConvert.DeserializeObject<IDictionary>(userId);

            var IdCzlowieka = serializer["nazwaValueId"];

            int IntIdCzlowieka = Convert.ToInt32(IdCzlowieka);

            var danePracownika = _uzytkownicyContext.Uzytkownicy.Where(x => x.Id == IntIdCzlowieka).Select(s => new
            {
                UserDepartament = s.Departament,
                UserManager = s.ManagerLogin

            });


   return Json(danePracownika);
}

возвращение n: //

[0] {UserDepartament = "здесь есть значение / строка", UserManager = "здесь есть значение / строка"} enter image description here

РЕДАКТИРОВАТЬ

Вопрос в том, что не так с кодом, почему он не работает для меня?

.

1 Ответ

2 голосов
/ 08 февраля 2020

Я вижу, что в Вашем GetDepartmentAndManager Вы не используете Ваш переданный параметр userID:

var danePracownika = ... .Where(x => x.Id == IntIdCzlowieka)...

должен быть Where(x => x.Id == userId).

Следующая вещь, которая пришла к me - это значение, которое вы фактически получаете внутри действия контроллера; основываясь на коде JS, я бы сказал, что это не идентификатор сотрудника, который вы передаете, а строковый объект { "nazwaValueId": ... }, который в лучшем случае будет обрабатываться сервером, и вы получите необработанную строку в виде значение userId (если вы не определили класс IModelBinder, который будет обрабатывать преобразование из строкового { "nazwaValueId": ... } в значение этого поля - подробнее об этом вы можете найти здесь ).

Да, кстати - пожалуйста, старайтесь не смешивать языки. У меня есть друг в компании, который был вынужден работать с немецким проектом, и весь их код был написан на немецком языке - вы определенно не были бы рады работать с ним. Но если это проект, созданный только PL для PL, я предполагаю, что это какой-то приемлемый подход.

Также я настоятельно советую вам не использовать HTTP POST метод для получения данных. Короче говоря, существует соглашение, что GET запросов предназначены для получения данных, и Вы можете вызывать их столько раз, сколько захотите, не затрагивая состояние (było tak ie m sdre słowo na to, ale n ie pamiętam ;)) и POST предназначены для сохранения / изменения данных и всегда должны перенаправляться на метод GET при возврате. Вы можете прочитать больше об этом здесь .

РЕДАКТИРОВАТЬ:

Хорошо, почему-то я обнаружил, что вызов в текущей форме отправляет данные не как тело но как форма. Я не знаю, я не использую jQuery. Но вот запрос: enter image description here

, поэтому я изменил подпись действия на

public ActionResult GetDepartmentAndManager([FromForm]string userId)

, чтобы начать работать. Может быть, с твоей стороны это работает нормально, я не знаю. Но я обнаружил, что при отправке ответа клиенту мы получаем ... это: enter image description here

, так что вы можете увидеть либо Ajax, либо сервер изменился JSON ключи должны быть kebabCase, а не PascalCase, и поэтому вы получаете неопределенные значения. Потому что свойства, которые вы читаете, не существуют. Просто проверьте это: alert(danePracownika.userDepartament + " " + danePracownika.userManager);

ОБНОВЛЕНИЕ:

Я проверил, это не ошибка сервера: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...