Как выполнить вызов метода контроллера в Javascript - PullRequest
0 голосов
/ 15 апреля 2020

Добрый день! У меня есть следующее действие контроллера:

[HttpPost]
public ActionResult ShowComparisonResultSimpleViewFromJs(List<GetDocumentList_Result> documents,
        GetAgreementNumberKktShiftInfo_Result infoResult)
{
    ViewBag.DisplayName = CurrentUser?.DisplayName;
    ViewBag.Documents = documents;
    ViewBag.DocumentCount = Convert.ToString(documents.Count());

    return View("ComparisonResultSimpleView", infoResult);  
}

У меня также есть представление InputKktShiftView, которое имеет обработчик нажатия кнопки. В нем мне нужно вызвать метод контроллера, указанный выше, в результате загружается страница ComparisonResultSimpleView. Вот пример обработчика нажатия кнопки:

<script>
function OnClick(s, e) {
    //Data for example:
    var parameterModel = {
        FnFactoryNumber: '1',//'9280440300664345',
        ShiftNumber: 38
    };

    $.ajax({
        type: 'POST',
        url: '/TaxcomProblems/GetInputKktShiftJsonResult',
        data: parameterModel
    }).success(function(data) {

        if (data.IsValid) {
            if (data.InfoResult != null) {

                var jsData = {
                    documents: data.Documents,
                    infoResult: data.InfoResult
                };

                //Here you need to call the /TaxcomProblems/ShowComparisonResultSimpleViewFromJs method

                //$.ajax({
                //    type: 'POST',
                //    url: '/TaxcomProblems/ShowComparisonResultSimpleViewFromJs',
                //    data: jsData,
                //    dataType:'html',
                //    success: function(result) {
                //        var view = $("ComparisonResultSimpleView");
                //        view.html(result);
                //    }
                //});

            } else {
                dxConfirm("Перейти на страницу выбора ККТ?")
                    .success(function() {
                        window.location.href = "/TaxcomProblems/ShowChoiceKktView";
                    });
            }
        }
    });

}

Вот код для моей страницы ComparisonResultSimpleView:

@using System.Web.UI.WebControls
@using BonusProgramAPI.Tools
@model BonusProgramAPI.EF.GetAgreementNumberKktShiftInfo_Result

@{
   ViewBag.Title = "Результаты для ККТ и смены";
   ViewBag.agreementNumber = Model?.agreementNumber;
   ViewBag.outletId = Model?.outletId;
   ViewBag.fnFactoryNumber = Model?.fnFactoryNumber;
   ViewBag.openDateTime = Model?.openDateTime.ToString("dd-MM-yyyy hh:mm:ss");
   ViewBag.shiftNumber = Model?.shiftNumber;
}

<script>
   function OnBtnGetKktInfoClick(s, e) {
      pcKktInfo.Show();
   }
</script>


@Html.DevExpress().FormLayout(settings =>
{
   settings.Name = "rootLayout";
   settings.Items.AddGroupItem(group =>
   {
     @* some code *@
   }
}).GetHtml()

@* PopupControls: *@
@{
    Html.RenderPartial("PopupControlKktInfoPartialView");
    Html.RenderPartial("PopupControlShiftInfoPartialView");
 }

Вопрос: Как мне вызвать ShowComparisonResultSimpleViewFrom Js метод контроллера TaxcomProblems, чтобы отображалась страница ComparisonResultSimpleView? PS: Если я использую ajax, то я правильно вызываю указанный метод (все данные передаются ему правильно), но указанная страница не отображается, а текущая страница остается.

Ответы [ 2 ]

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

Ajax сообщение не будет обновлять sh страницу. Вы должны сделать это самостоятельно. Также вы отправляете полную страницу из действия ShowComparisonResultSimpleViewFromJs со следующим кодом:

return View("ComparisonResultSimpleView", infoResult);

Что вы можете сделать, это заставить действие ShowComparisonResultSimpleViewFromJs вернуть частичное содержимое (html) вместо полной страницы содержание. А затем добавьте возвращенные данные в div для метода успеха вызова ajax.

Чтобы вернуть частичное представление, напишите:

return PartialView("~/views/ComparisonResultSimpleView.cshtml", infoResult);

Также в кодах javascript обратите внимание, что в селекторе элементов отсутствует запись класса или идентификатора. Вы можете просто написать:

$("#ComparisonResultSimpleView").html(result);    
1 голос
/ 15 апреля 2020

Ваш селектор jquery пытается получить элемент

<ComparisonResultSimpleView></ComparisonResultSimpleView>

отсюда

success: function(result) {
                     var view = $("ComparisonResultSimpleView");
                     view.html(result);
                  }

Вы хотите выбрать элемент с id = ComparisonResultSimpleView?

<div id="ComparisonResultSimpleView"></div>

Вам нужно будет добавить «#» к вашему селектору следующим образом:

success: function(result) {
                     var view = $("#ComparisonResultSimpleView");
                     view.html(result);
                  }

Хотите знать, правильный ли селектор? Запустите следующую строку в консоли браузера вашей страницы

$("#ComparisonResultSimpleView").length; // greater than zero means the number of elements matching selector. Zero means no match.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...