Member 14615938 Ответов: 0

Мастер-детали в ASP.NET ядро 3


I defined this view for the master section



<table class="table">
    <colgroup>
        <col style="width:20px;" />
        <col style="width:15%;" />
        <col />
        <col style="width:15%;" />
        <col style="width:15%;" />
        <col style="width:11%;" />
    </colgroup>
    <thead>
        <tr class="text-right">
            <th>
                 
            </th>
            <th>
                @Html.DisplayNameFor(model => model.SerialNumber)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.DocumentName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.UnitName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.FormatedDate)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.StatusName)
            </th>
            @*<th></th>*@
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    <a href="#" data-id="@item.DocumentInfoId" name="document-details">
                        
                    </a>
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.SerialNumber)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.DocumentName)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.UnitName)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.FormatedDate)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.StatusName)
                </td>
            </tr>
            <tr>
                <td colspan="6">
                    <div id="div-@item.DocumentInfoId">
                    </div>
                </td>
            </tr>
         }
    </tbody>
</table>


Then in JavaScript I wrote this code for details


   $('a[name="document-details"]').click(function (event) {
        event.preventDefault();
        var documentInfoId = $(event.currentTarget).data('id');
        if ($('#icon-' + documentInfoId).hasClass('fa-plus-square')) {
            showRows(documentInfoId);
        } else {
            hideRows(documentInfoId);
        }
    });

    function showRows(documentInfoId) {
        $.ajax({
            type: 'POST',
            url: '/Documents/DocumentGroup',
            data: { documentInfoId: documentInfoId },
            dataType: 'json',
            success: function (result) {
                //var template =
                //    '<a href="Documents/Create?documentInfoId=' + documentInfoId + '" class="btn btn-primary ml-2 mb-1">جدید</a>' 
                if (result.length > 0) {
                  var template =
                        '<table class="documents w-50">' +
                        '<colgroup>' +
                        '<col style="width:auto;" />' +
                        '<col style="width:auto;" />' +
                        '<col style="width:auto;" />' +
                        '<col style="width:auto;" />' +
                        '<col style="width:auto;" />' +
                        '<col style="width:auto;" />' +                      
                        '</colgroup>' +
                        '<thead>' +
                        '<tr>' +
                        '<th>شماره سند</th>' +
                        '<th>نام سند</th>' +  
                        '<th>نام واحد</th>' + 
                        '<th>تاریخ آخرین نسخه </th>' +
                        '<th>وضعیت</th>' +
                        '<th></th>' +
                        '</tr>' +
                        '</thead>' +
                        '<tbody>';
                    for (var i = 0; i < result.length; i++) {
                        var item = result[i];                            
                        template += '<tr>' +
                            '<td>' + item.serialNumber + '</td>' +
                            '<td>' + item.documentName + '</td>' +
                            '<td>' + item.unitName + '</td>' +
                            '<td>' + item.formatedDate + '</td>' +
                            '<td>' + item.statusName + '</td>' +
                            '<td>' +
                            '<a href="/Documents/Edit?documentInfoId=' + item.documentInfoId + '" class="fa fa-edit mx-1"></a>' +
                            '<a href="/Documents/Delete?documentInfoId=' + item.documentInfoId + ' " class="fa fa-trash mx-1"></a>' +
                            '</td>' +
                            '</tr>';
                    }
                    template += '</tbody>' +
                        '</table>';
                }

                $('#div-' + documentInfoId).append(template);
                $('#icon-' + documentInfoId).removeClass('fa-plus-square').addClass('fa-minus-square');
            },
            error(ex) {
                debugger;
            }
        });
    }

function hideRows(documentInfoId) {
        $('#div-' + documentInfoId).children().remove();
        $('#icon-' + documentInfoId).removeClass('fa-minus-square').addClass('fa-plus-square');
    }
});


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

Details are not displayed when I click on fa-plus-square


код в контроллере:
public async Task<IActionResult> DocumentGroup(int? id)
{
    try
    {
        if (id == null)
        {
            throw new ArgumentNullException(nameof(id), "مقدار شناسه نمی تواند  تهی باشد.");
        }
        var documentInfo = await _context.DocumentsInfo
            .FirstOrDefaultAsync(di => di.DocumentInfoId == id);
        if (documentInfo == null)
        {
            return NotFound(new { Message = "سند مورد نظر یافت نشد." });
        }

        var documentGroup = await _context.DocumentsInfo
            .Include(s => s.DocumentStatus)
            .Where(dg => dg.UnitCode == documentInfo.UnitCode && dg.SerialNo == documentInfo.SerialNo && dg.DocumentTypeId == documentInfo.DocumentTypeId)
            .OrderByDescending(x => x.Revision)
            .Select(e => new DocumentRevisionModel
            {
                Id = e.DocumentInfoId,
                DocumentName = e.DocumentName,
                DocumentTypeId = e.DocumentTypeId,
                UnitCode = e.UnitCode,
                SerialNo = e.SerialNo,
                Revision = e.Revision,
                FormatedDate = e.ExecutionDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture),
                StatusName = e.DocumentStatus.StatusName
            })
            .ToListAsync();

        var unitList = _context.Units.ToList();
        foreach (var item in documentGroup)
        {
            item.UnitName = unitList.Find(un => un.Code == item.UnitCode).Name;
        }

        return Json(documentGroup);
    }

    catch (Exception ex)
    {
        _logger.LogError(ex, "خطای فراخوانی متد DocumentGroup");
        return BadRequest(new { Message = "خطای غیر منتظره" });
    }
}

F-ES Sitecore

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

Member 14615938

Значок определен в представлении я ничего не замечаю когда ставлю отладчик

0 Ответов