Нокаут js в ASP. net Core 2.1 возвращает меня неопределенным? - PullRequest
0 голосов
/ 14 января 2020

У меня проблема с Kcnockout Js, и когда он пытается вернуть результат, он возвращает его мне недифференцированным, я проверил подрядчика, и если он возвращает мне данные, как показано на следующем рисунке,

enter image description here

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

enter image description here

Я не знаю, почему он отправляет мне это сообщение, это код моего контроллера,

public JsonResult GetGender()
{
    ServiceResult serviceResult = new ServiceResult();

    serviceResult = this._genderServices.GetListGenders();

    return Json(serviceResult);

}

Это представление code,

<h2>Generos</h2>
<hr />
<p data-bind="visible: IsNewButton">
    <a href="#" data-bind="click: New" class="btn btn-primary">Crear Nuevo</a>
</p>
<div id="divListGenders" data-bind="visible: ShowResult">
    <table class="table">
        <thead>
            <tr>
                <th>
                    Genero
                </th>
                <th></th>
                <th></th>
            </tr>
        </thead>
        <tbody data-bind="foreach: Genders">
            <tr>
                <td style="text-align:left" data-bind="text: GenderName"></td>
                <td style="text-align:center">
                    <a href="#" data-bind="click: $parent.Edit" class=" btn btn-warning"><span class="glyphicon glyphicon-edit"></span></a> |
                    <a href="#" data-bind="click: $parent.Details" class=" btn btn-info"><span class="glyphicon glyphicon-eye-open"></span></a> |
                    <a href="#" data-bind="click: $parent.Delete" class=" btn btn-danger"><i class="fas fa-trash"></i></a>
                </td>
            </tr>
        </tbody>
    </table>
</div>
<div data-bind="visible: IsBackToListButton">
    <a href="#" data-bind="click: BackToList" class="btn btn-info">Regresar</a>
</div>
<script src="~/js/Gender.js"></script>

Этот метод возвращает список жанров,

    var LoadListGenders = function () {
        $.ajax({
            url: '/AdminGenders/GetGender',
            data: null,
            dataType: "json",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            async: true,
            success: function (data) {
                if (data.Success) {
                    genderViewModel.Genders.removeAll();
                    genderViewModel.Genders(data.Data);
                }
                else {
                    alert(data.Data);
                }
            },
            error: function (ex) {
                alert('Ocurrión un error, cargando los generos.');
            }
        });

    };

}

Я предоставил его на asp. net MVC 5, и он работает хорошо Я не знаю, почему это не работает для меня в ASP. NET Core 2.1, я был бы признателен за помощь

1 Ответ

2 голосов
/ 14 января 2020

В ASP.NET Core случаем по умолчанию для сериализации вывода в JSON является camelcase, тогда как это было Pascal делом для ASP.NET MVC 5.

Обратите внимание, что первое изображение в вашем посте показывает все свойства: camelcase:

Object { success: true, message: null, data: Array(1) ... }

Аналогично для элементов в массиве data: genderId, genderName, et c.

Одним из способов решения этой проблемы является обновление вашего javascript код и Knockout привязок с применением имен свойств camelcase.
Например,

success: function (data) {
    if (data.success) {
        // ....
    }
    else {
        alert(data.data);
    }
}


В качестве альтернативы вы можете настроить свой веб-API так, чтобы он возвращал Pacalcased JSON, например, имея код ниже в Startup ConfigureServices:
services
    // ...
    .AddJsonOptions(options => {
        options.JsonSerializerOptions.PropertyNamingPolicy = null;
    })
    // ... 
...