Рендеринг ASP. NET PartialView с AJAX не работает - PullRequest
0 голосов
/ 15 апреля 2020

Я занимаюсь разработкой ASP. NET MVC веб-приложения. На веб-странице бритвы (cs html) я пишу следующую гиперссылку:

<a href="#"  onclick="openStudentsRequestsDetail('@Url.Action("StudentRequestsDetail")', @item.RequestId , @item.EsameEstStudente.Id  );" style="display: block; font-size: 10px">@Recognition.Views.Students.Localization.Requests.CorrispondenceNotAutomatic</a>

Файл javascript правильно указан и содержит следующий код:

var DETAIL_STUDENT_REQUESTS_SELECTOR = "#lookup_student_requests_detail";

$(document).ready(function () {
   // Set ad_lookup_detail as dialog
   recognitionDialog(DETAIL_STUDENT_REQUESTS_SELECTOR);
   registerAjaxTooltip(DETAIL_STUDENT_REQUESTS_SELECTOR);
});

function openStudentsRequestsDetail(controllerActionURL, RequestId , EsameEstId) {


   showLoading();

   getStudentRequestsDetail(controllerActionURL, RequestId, EsameEstId);

}

function closeStudentsRequestsLookup() {
   $(DETAIL_STUDENT_REQUESTS_SELECTOR).dialog('close');
}


function getStudentRequestsDetail(controllerActionURL, pRequestId, pEsameEstId)
{

    ajaxPost(controllerActionURL, { EsameEstStudenteId: pEsameEstId, RichiestaAutorizzId: pRequestId }, function (data)
    {

    $(DETAIL_STUDENT_REQUESTS_SELECTOR).html(data);
    hideLoading();
    openDialog(DETAIL_STUDENT_REQUESTS_SELECTOR,true;

    }, null);

}

I поместите точку останова в строку

$(DETAIL_STUDENT_REQUESTS_SELECTOR).html(data)

, и данные содержат правильный код HTML.

Селектор используется в качестве идентификатора div в частичном представлении, которое имеет следующий код:

@model IEnumerable<Recognition.ViewModels.StudentRequestsViewModel>

<table class="age-table">
    <!--   Table header   -->
    <thead style="font-size: small;">
        <tr>

            <th>
                @Recognition.Views.Students.Localization.Requests.Status
            </th>
            <th>
                @Recognition.Views.Students.Localization.Requests.ForeignExam
            </th>
            <th>
                @Recognition.Views.Students.Localization.Requests.ItalianExam
            </th>
            <th>
                @Recognition.Views.Students.Localization.Requests.Ssd
            </th>
            <th>
                @Recognition.Views.Students.Localization.Requests.RatreExt
            </th>
            <th>
                @Recognition.Views.Students.Localization.Requests.RateBocconi
            </th>
            <th style="width: 25%;">
                @Recognition.Views.Students.Localization.Requests.Validity
            </th>
        </tr>

    </thead>

    <!-- End Table header -->
    <!--   Table Content   -->
    @foreach (var item in Model)
    {

        <tr id="stu_exam_@item.EsameEstStudente.Id">


            @if (item.EsameEstStudente.AutorizzEsameEst != null)
            {



                <td data-sort-value="@item.EsameEstStudente.AutorizzEsameEst.Stato">
                    @Html.DisplayFor(a => item.EsameEstStudente.AutorizzEsameEst.StatoEnum)
                    @if (item.EsameEstStudente.AutorizzEsameEst.AutorizzAutomatica == 0)
                    {
                        <a href="#" onclick="openStudentsRequestsDetail('@Url.Action("StudentRequestsDetail")', @item.RequestId , @item.EsameEstStudente.Id  );" style="display: block; font-size: 10px">@Recognition.Views.Students.Localization.Requests.CorrispondenceNotAutomatic</a>
                    }
                </td>
                <td>@Html.DisplayFor(a => item.EsameEstStudente.EsameEstero.Descrizione)</td>
                if (item.EsameEstStudente.AutorizzEsameEst.AD_COD != null && item.EsameEstStudente.AutorizzEsameEst.AA_OFF_ID.HasValue)
                {
                    <td>
                        [@Html.DisplayFor(a => item.EsameEstStudente.AutorizzEsameEst.AD_COD)]
                        @Html.DisplayFor(a => item.AdName)
                        <span style="display: block; color: gray;">(@GlobalResources.Teacher @Html.DisplayFor(a => item.EsameEstStudente.AutorizzEsameEst.V_ESSE3_DOCENTI.COGNOME))</span>

                    </td>
                    <td>@Html.DisplayFor(a => item.SSD)</td>
                    <td>@Html.DisplayFor(a => item.EsameEstStudente.VotoEst)</td>
                    <td>@Html.DisplayFor(a => item.EsameEstStudente.VotoIta)</td>
                }
                else
                {
                    <td>
                        @Recognition.Views.Students.Localization.Requests.WithoutCorrispondence.ToUpper()
                        <span style="display: block; color: gray;">(@GlobalResources.RespCDS @Html.DisplayFor(a => item.EsameEstStudente.AutorizzEsameEst.V_ESSE3_CARICHE.COGNOME))</span>
                    </td>
                    <td>@Html.DisplayFor(a => item.EsameEstStudente.AutorizzEsameEst.SettoreNoCorrisp)</td>
                    <td>@Html.DisplayFor(a => item.EsameEstStudente.VotoEst)</td>
                    <td>@Html.DisplayFor(a => item.EsameEstStudente.VotoIta)</td>
                }

                <td>@Html.DisplayWithFallback(a => string.Format("{0}/{1}", item.EsameEstStudente.AutorizzEsameEst.AnnoInizioValid + (item.EsameEstStudente.AutorizzEsameEst.Durata - 1), item.EsameEstStudente.AutorizzEsameEst.AnnoInizioValid + (item.EsameEstStudente.AutorizzEsameEst.Durata - 1) + 1), fallback: "", compareTo: "/")</td>
            }
            else
            {
                <td data-sort-value="-1"></td>
                <td></td>
                <td>@Html.DisplayFor(a => item.EsameEstStudente.EsameEstero.Descrizione)</td>
                <td></td>
            }

        </tr>

    }
    <!-- End Table Content -->
</table>

<div id="lookup_student_requests_detail"></div>

Однако страница не отображается.

Вы можете мне помочь?

Спасибо, Симона

Ответы [ 2 ]

2 голосов
/ 15 апреля 2020

Помещен ли контейнер "#lookup_student_requests_detail" в частичное представление? если да, то вам нужно переместить его ниже следующего кода

<a href="#"  onclick="openStudentsRequestsDetail('@Url.Action("StudentRequestsDetail")', @item.RequestId , @item.EsameEstStudente.Id  );" style="display: block; font-size: 10px">@Recognition.Views.Students.Localization.Requests.CorrispondenceNotAutomatic</a>
0 голосов
/ 16 апреля 2020

Я решил проблему, изменив файл javascript следующим образом:

var DETAIL_STUDENT_REQUESTS_SELECTOR = "#lookup_student_requests_detail";

var opt = {
  autoOpen: false,
  modal: true,
  width: 600,
  height: 300
};

$(document).ready(function () {
  // Set ad_lookup_detail as dialog
  recognitionDialog(DETAIL_STUDENT_REQUESTS_SELECTOR);
registerAjaxTooltip(DETAIL_STUDENT_REQUESTS_SELECTOR);
});

function openStudentsRequestsDetail(controllerActionURL, RequestId , EsameEstId) {


    showLoading();

    getStudentRequestsDetail(controllerActionURL, RequestId, EsameEstId);

}

function closeStudentsRequestsLookup() {
  $(DETAIL_STUDENT_REQUESTS_SELECTOR).dialog('close');
}


function getStudentRequestsDetail(controllerActionURL, pRequestId, pEsameEstId)
{

    ajaxPost(controllerActionURL, { EsameEstStudenteId: pEsameEstId, RichiestaAutorizzId: pRequestId }, function (data)
    {

    $(DETAIL_STUDENT_REQUESTS_SELECTOR).html(data);
    hideLoading();


   openDialogDetail(DETAIL_STUDENT_REQUESTS_SELECTOR);

    }, null);

}

function openDialogDetail(selector) {

   $(selector).dialog(opt).dialog("open");


}
...