如何使用 Ajax 从 asp.net Core2.2 中的子模型获取值

How to Get values From Sub Model in asp.net Core2.2 using Ajax

我在我的 Asp.net 核心 2.2 中使用 Ajax,它工作得很好,但我使用的是 Json 值 returns undefined 因为在视图中我使用不同的方式 post 页面中的数据。

当我的视图看起来像这样时,ajax GET 如何获得正确的数据:

<div class="treeview">
                        @{
                            if (Model._InstanceDepartment != null && Model._InstanceDepartment.Count() > 0)
                            {

                                <ul>
                                    @foreach (var i in Model._InstanceDepartment)
                                    {
                                        <li>
                                            <span class="collapse collapsible" data-loaded="false" pid="@i.DepartId">&nbsp;</span>
                                            <span>
                                                <a href="#@i.NavUrl" onclick="mydevpartmanifested()">@i.DepatName</a>

                                            </span>                                           
                                        </li>
                                    }
                                </ul>
                            }
                        }
                    </div>

和Ajax从控制器获取数据喜欢

$.ajax({
                url: "/User/SubMenu",
                type: "GET",
                data: data,
                dataType: "json",
                success: function (d) {
                    $(this1).removeClass("loadingP");

                    if (d.length > 0) {

                        var $ul = $("<ul></ul>");
                        $.each(d, function (i, ele) {
                            $ul.append(
                                $("<li></li>").append(
                                    "<span class='collapse collapsible' data-loaded='false' pid='" + ele.DepartId + "'>&nbsp;</span>" +
                                    "<span><a href='" + ele.NavUrl + "'>" + ele.DepatName + "</a></span>"
                                )
                            )
                        });

                        $(this1).parent().append($ul);
                        $(this1).addClass('collapse');
                        $(this1).toggleClass('collapse expand');
                        $(this1).closest('li').children('ul').slideDown();
                    }
else{...} ../code continue just fine.

问题是我无法从 Model 获得数据生命周期,但是从 Model.__InstanceDepartment

VS2019 DEBUG 显示如下:

控制器看起来像这样:

  public JsonResult SubMenu(string pid) 
        {
            System.Threading.Thread.Sleep(1000);
            var subcomp = new UserSecurityMains();
            int pID = 0;
            int.TryParse(pid, out pID);
            using (QAEntities context = new QAEntities())
            {
                subcomp._InstanceDepartment = context.AuthDepartment.Where(x => x.ParentMenuId.Equals(pID)).OrderBy(c => c.DepatName).ToList();
            }
            return Json(subcomp._InstanceDepartment); 
        }

What I need is that the data which is found under _InstanceDepartment as shown on the picture, must be accessible in if(d.length > 0) to display the data. Currently, it's displays none, undefined

谁有 Fast/Quick 方法来做到这一点??

有几处错误。首先你需要记住 .each 使用索引。此外,用于 json 的默认序列化程序将默认使用驼峰命名法,除非您在 ConfigureServices.

中更改它

像下面这样的东西应该可以让它工作:

$.ajax({
            url: "/User/SubMenu",
            type: "GET",
            dataType: "json",
            success: function (data) {
                $(this1).removeClass("loadingP");

                //You can view what it returned in the browser console
                //console.log(data);

                if (data.length > 0) {

                    var $ul = $("<ul></ul>");

                    $.each(data, function (index, element) {

                        $ul.append(
                            $("<li></li>").append(
                                "<span class='collapse collapsible' data-loaded='false' pid='" + data[index].departId + "'>&nbsp;</span>" +
                                "<span><a href='" + data[index].navUrl + "'>" + data[index].depatName + "</a></span>"
                            )
                        )