Подтвердить что ты не робот

Вызов функции Javascript после обновления PostPanel

У меня в моем UpdatePanel есть литерал, который генерирует массив javascript на основе метода в моем коде.

У меня нет проблем при загрузке моего содержимого на загрузку страницы. Но если я попытаюсь выполнить поиск, чтобы обновить литерал массива javascript внутри моей панели обновления, я обнаружил, что литерал обновляется после обратной передачи после того, как javascript уже запущен.

Вот базовый пример того, что у меня есть:

<script type="text\javascript">
function BindMyFunction(itemList)
{
    //Do something
}
</script>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>  
<!-- Literal containing generated JS array -->
    <asp:Literal ID="ProfileJavscriptOutput" runat="server"></asp:Literal> 
    <ul id="person-search">
    <li><asp:TextBox ID="TxtFirstname" runat="server" Text=""></asp:TextBox></li>
    <!-- Update Literal onClick -->
        <li><asp:ImageButton CssClass="searchbtn" ID="ImageButton1" runat="server" OnClick="ImageButton1_Click" /></li>
    </ul>    
    <!-- Some jCarousel rendered -->
</asp:UpdatePanel>

Я смотрел следующие сообщения:

ASP.NET - UpdatePanel и JavaScript

вызвать javascript после обратной передачи.

Но я не могу правильно применить его к моему коду.

Он отлично работает, когда я не использую UpdatePanel. Но это требование, чтобы позиция страницы не двигалась при выполнении поисковых запросов.

4b9b3361

Ответ 1

вы можете добавить следующий код в событие Page_Load:

ScriptManager.RegisterStartupScript(Me.rptGridAlbum, rptGridAlbum.GetType, "scriptname", "somejavascript", True)

Это приведет к срабатыванию javascript на вашей странице после обратного вызова AJAX.

MSDN

Ответ 2

Вы можете создать простой метод webservice, который при необходимости возвращает массив javascript на страницу и завершает вызов этого веб-сервиса в методе javascript. Вызов метода javascript для обновления массива в памяти на стороне браузера будет работать лучше, чем ожидать, что литерал js array будет снова анализироваться с помощью UpdatePanel postbacks с любым успехом.

Ответ 3

var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm != null) {
    prm.add_endRequest(function (sender, e) {
        if (sender._postBackSettings.panelsToUpdate != null) {
            DisplayCurrentTime(); // here your javascript function
        }
    });
};