asp.net mvc JavaScript в View User Controls отображается через обычный запрос браузера и запрос AJAX - PullRequest
0 голосов
/ 18 февраля 2010

У меня есть этот код в некоторых моих файлах ASCX:

<%=Html.ActionLink(Resources.Localize.Routes_WidgetsEdit, "Edit", "Widget", 
new { contentType = Model.ContentType, widgetSlug = Model.Slug, modal=true},
new
{
  rel = "shadowbox;height=600;width=700",
  title = Resources.Localize.Routes_WidgetsEdit,
  @class = "editWidget"
})%>

Обратите внимание, что rel = "shadowbox ..." там. Это необходимо для подключения клона ShadowBox Lightbox для этого ActionLink.

Это прекрасно работает, когда пользователь запрашивает страницу, содержащую этот элемент управления, через обычный запрос браузера. Но я также визуализирую / собираю эти элементы управления View User через AJAX-запросы. Например, я бы сделал запрос к / Widget / RenderToString / ..., используя метод jQuery .ajax (), и он вернул бы HTML-код для этого элемента управления. Это работает отлично, и это делает код отлично. Затем я вставляю (добавляю) результат в DIV на страницу, с которой был сделан запрос AJAX. Это также хорошо работает, и возвращаемый HTML-код добавляется. Единственная проблема - ShadowBox не подключен. Даже при том, что код для этого предоставлен.

Кажется, требуется перезагрузка страницы (F5) каждый раз, чтобы подключить ShadowBox. Поскольку я выполняю AJAX GET и мгновенно добавляю, чтобы избавиться от необходимости выполнять обход сервера, я также хотел бы, чтобы ShadowBox подключался без обновления.

Может ли кто-нибудь помочь мне с этим? Спасибо

UPDATE:

Да, у меня есть это на моем сайте. Глава мастера:

<script src="<%=Url.Content("~/Scripts/shadowbox-build-3.0rc1/shadowbox.js") %>" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function() {
        // insert functions calls here that provide some default behaviour
        externalLinks();
    });

    Shadowbox.init({
        language: "en",
        players: ["img", "html", "iframe"],
        onClose: function() { location.reload(true) }
    });
</script>

Как мне снова запустить Shadowbox после вызова AJAX?

Ответы [ 2 ]

1 голос
/ 18 февраля 2010

Есть много плагинов shadowbox ... какой из них вы используете? (Я не могу дать вам точный код без него.) В любом случае, я полагаю, что в вашем $(document).ready(function () { ... }); есть что-то, что приказывает shadowbox plungin связать себя. Вам нужно позвонить снова после вызова AJAX.

0 голосов
/ 18 февраля 2010

Только что нашел решение здесь

// call this after adding the new HTML to the page
// set up all anchor elements with a "editWidget" class to work with Shadowbox
Shadowbox.setup("a.editWidget", {});
...