Окно пользовательского интерфейса кендо не будет открывать представление с макетом

Я использую KendoUI для MVC, пытаясь открыть окно Kendo-UI, которое загружает его содержимое следующим образом:

.LoadContentFrom("Edit", "CustomerContact")
.Events(events => events.Open("centerWindow"))

Когда представление Edit.cshtml использует мой _DialogLayout.cshtml, оно не загружается. Когда представление Edit.cshtml имеет Layout = null, окно загружается нормально.

Ошибка JavaScript, которую я получаю при нажатии, чтобы открыть диалоговое окно: Uncaught TypeError: Cannot read property 'open' of undefined

Вот мой javascript: .Events(events => events.Open("centerWindow"))

<script>
    $(document).ready(function () {
        $("#btnNewContact")
            .bind("click", function () {
                $("#windowContact").data("kendoWindow").open();
            });
    });

    function centerWindow(e) {
        e.sender.center();
    }
</script>

Почему возникает ошибка, когда Edit.cshtml использует представление _DialogLayout.cshtml, которое представляет собой урезанную версию _Layout.cshtml. Он отлично работает, когда я создаю представление без макета.


person JTunney    schedule 22.02.2015    source источник


Ответы (1)


Проверьте, включает ли _DialogLayout.cshtml jQuery во второй раз (обычно внизу). Если это так, вам нужно удалить его. Он заменяет текущую версию jQuery, и в результате кеш данных, к которому вы обращаетесь с помощью .data("kendoWindow"), пуст.

person Lars Höppner    schedule 23.02.2015
comment
Хм, это сработало, но для меня это не имеет смысла, можете ли вы объяснить? У меня есть 2 макета _Layout.cshtml и _DialogLayout.cshtml. Если _Layout вообще не задействован, как он мешает? Это потому, что родительская страница загружена, поэтому технически сценарии с родительской страницы уже есть из _Layout.cshtml? Если это так, я думаю, мне следует удалить все сценарии/стили из _DialogLayout.cshtml. - person JTunney; 24.02.2015
comment
для меня это звучало так, как будто вы включаете jQuery и другие библиотеки на самой странице редактирования, но я не знаю, как выглядят ваши шаблоны; тогда, если вы используете DialogLayout, jQuery будет там дважды; Я не думаю, что Layout.cshtml включается, если Layout = null; вам просто нужно сделать так, чтобы jQuery был только один раз, и до библиотек кендо; включено ли это в макет или где-то еще, не должно иметь значения - person Lars Höppner; 24.02.2015