ASP.net Core 2.1 returns 中的 Knockout js 未定义?

Knockout js in ASP.net Core 2.1 returns me undefined?

我对 Kcnockout Js 有疑问,当他尝试 return 结果时,他 return 对我毫无区别,我已经验证了承包商,如果他是 return给我发数据,如下图所示,

但是当在视图中加载值列表时,它抛出它是未定义的,如下图所示,

我不知道他为什么给我发那条信息,这是我的控制器代码,

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

    serviceResult = this._genderServices.GetListGenders();

    return Json(serviceResult);

}

这是查看代码,

<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>

这是return流派列表的方法,

    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 中对我不起作用,我很感激帮助

ASP.NET Core 中,将输出序列化为 JSON 的默认大小写是驼峰式大小写,而 ASP.NET MVC 5.

是 Pascal 大小写

请注意,您 post 中的第一张图片显示所有属性都是驼峰式:

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

data 数组中的项目类似:genderIdgenderName

解决此问题的一种方法是通过应用驼峰式 属性 名称来更新您的 javascript 代码和 Knockout 绑定。
例如

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


或者,您可以选择将 Web API 配置为 return Pacalcased JSON,例如通过在 Startup ConfigureServices:

中输入以下代码
services
    // ...
    .AddJsonOptions(options => {
        options.JsonSerializerOptions.PropertyNamingPolicy = null;
    })
    // ...