Пользовательский интерфейс jQuery с главной страницей asp.net - PullRequest
1 голос
/ 01 июля 2010

Я обновляю один из моих сайтов с asp.net с помощью jQuery UI для использования главных страниц.

Вот фрагмент моего исходного кода, который работает без главных страниц, но не с:

    $('#myCancelEventDialog').dialog({
        autoOpen: false,
        width: 500,
        buttons: {
            "Cancel This Event": function () { __doPostBack('btnCancel', ''); },  
            "Do Nothing": function () { $(this).dialog("close"); }
        }
    });

Однако я вижу, что происходит, когда главная страница меняет имена функций, и этот код ниже исправляет это для этого экземпляра.

    $('#myCancelEventDialog').dialog({
        autoOpen: false,
        width: 500,
        buttons: {
            "Cancel This Event": function () { __doPostBack('ctl00$ContentPlaceHolder$btnCancel', ''); },  
            "Do Nothing": function () { $(this).dialog("close"); }
        }
    });

Обратите внимание, что я поместил префикс 'ctl00 $ ContentPlaceHolder $' в btnCancel, чтобы исправить функцию обратного вызова.

Из других потоков, которые я читал в stackoverflow, есть лучшее решение, чем исправление кода по одному месту за раз, как я делал выше, но пока не совсем правильно понял.

Каков универсальный способ получения функций обратной передачи пользовательского интерфейса jQuery для поиска правильной функции обратного вызова при использовании главных страниц, как в моем примере выше?

Ответы [ 3 ]

2 голосов
/ 01 июля 2010

Быстрое исправление может заключаться в следующем

 $('#myCancelEventDialog').dialog({
        autoOpen: false,
        width: 500,
        buttons: {
            "Cancel This Event": function () { __doPostBack("'" + $('[id$=btnvalue]')[0].id + "'", ''); },  
            "Do Nothing": function () { $(this).dialog("close"); }
        }
    });

При этом используется селектор jQuery окончание с , поскольку главная страница теперь означает, что ваш контрольный идентификатор имеет префиксы, но окончание такое же,Это работает, если у вас нет дублирующихся идентификаторов, разбросанных по точкам, что команда asp.net намеревалась остановить, добавив префиксные идентификаторы управления.Недостаток в том, что jQuery должен проделать дополнительную работу, чтобы найти элемент, поскольку он не может использовать собственный getElementById.

Другим исправлением может быть обновление до asp.net 4.0, где вы можетеповорот префикса управления с помощью clientidmode

1 голос
/ 01 июля 2010

Вы хотите использовать ClientID элемента управления, после которого вы:

__doPostBack('<%= btnCancel.ClientID %>', '');

Однако, если вы используете эту технику, вам придется заключить свой блок скрипта в div, который предоставляется среде исполнения ASP.Net через атрибут runat.

<div runat="server">
    <script type="text/javascript" language="javascript">
        //Your Script Here
    </script>
</div>
0 голосов
/ 31 мая 2013

Это может быть полезно для разработчиков;http://deepasp.wordpress.com/2013/05/31/jquery-dialog-in-asp-net-master-page/

...