MVC: при использовании Kendo().Window для загрузки PartialView, появляется ошибка "Ресурс не найден"

Я использую модал Kendo().Window() загрузить Partial View по нажатию кнопки.

У меня есть основной вид, скажем, View1, содержащий кнопку, код для отображения окна, где Partial View содержащий Kendo().Grid будет загружен, и javascript функция, которая открывает окно:

Вот что у меня на View1:

Это кнопка:

@(Html.Kendo().Button()
            .Name("btnSubmit")
            .HtmlAttributes(new { type = "button"})
            .Icon("k-icon k-i-file-txt")
            .Content("View Details")
            .Events(e => e.Click("DisplayDetailedView"))
)

Это окно для отображения содержимого PartialView:

@(Html.Kendo().Window()
            .Name("ReportData")
            .Title("Details Report")
            .LoadContentFrom("RedirectToView", "MyController")
            .Modal(true)
            .Visible(false)
            .Width(800)
            .Height(375)
            .Position(p => p.Top(100).Left(800))
)

И это javascript Функция для открытия окна:

function DisplayDetailedView() {
    var w = $("#ReportData").data("kendoWindow");
    w.open();
}

мой Partial View имеет Kendo().Grid, который вызывает метод из контроллера для заполнения данными:

@(Html.Kendo().Grid(Model.Report)
  .......
  .DataSource(ds => ds
      .Ajax()
      .Read(read => read.Action("GetReport","MyController", Model))

)

Когда я загружаю View1, вызывается метод, который должен вызываться при инициализации Grid, и я получаю сообщение об ошибке "

"Этот ресурс не может быть найден.

HTTP 404. Ресурс, который вы ищете (или одна из его зависимостей), возможно, был удален, изменилось его имя или временно недоступен. Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

Запрашиваемый URL:/MyController/GetReport"

Похоже, страница пытается сделать мой Kendo().Window, звонки RedirectToView в контроллере от .LoadContentFrom событие окна для перенаправления на мой Partial View с сеткой

Функциональность используется для работы с модальным подходом начальной загрузки, когда я не использовал Kendo().Window внутри View1, но использовал Ajax нажмите на кнопку, которая называется RedirectToViewметод:

function ShowReversalsDetailedView() {
    $.ajax(
        {
            url: "/MyController/RedirectToView/",
            type: 'post',
            dataType: "html",
            contentType: 'application/json; charset=utf-8',
            success: function (result) {
                $(".modal-content").html(result);
            }
        })
}

Тем не менее, мне нужно изменить его на Kendo().Window()

Как я могу это исправить?

1 ответ

Во-первых, RedirectToView должен возвращать частичное представление, а не перенаправлять его.

Если это так, попробуйте загрузить свой контент, когда откроете окно. Итак, сначала удалите .LoadContentFrom("RedirectToView", "MyController") из окна декларации.

Тогда в вашей функции JavaScript:

function DisplayDetailedView() {
    var w = $("#ReportData").data("kendoWindow");
    w.refresh({
        url: '@Url.Action("RedirectToView", "MyController")'
    });
    w.open();
}

Я бы также изменил ваш ajax-вызов на использование @Url.Action. Я смущен, хотя, почему вы будете вызывать RedirectToView здесь? Это POST или он возвращает частичное или это перенаправление? Перенаправление было бы плохо - вам нужно сделать это на стороне клиента.

function ShowReversalsDetailedView() {
    $.ajax(
        {
            url: '@Url.Action("RedirectToView", "MyController")',
            type: 'post',
            dataType: "html",
            contentType: 'application/json; charset=utf-8',
            success: function (result) {
                $(".modal-content").html(result);
            }
        })
}

См. https://docs.telerik.com/kendo-ui/api/javascript/ui/window/methods/refresh

Другие вопросы по тегам