2009-05-22 1 views
6

Я знаю, что могу подключаться к событиям на стороне клиента для запуска JavaScript после каждой частичной обратной передачи; Однако, я хочу сделать что-то вроде этого:Как управлять тем, какой JavaScript запускается после частичной обратной отправки UpdatePanel endRequest?

protected void FooClicked(object sender, EventArgs e) { 
     ClientScript.RegisterStartupScript(GetType(), "msg", "showMsg('Foo clicked');",true);   
} 

Я знаю, что я мог полностью взломать его со скрытыми полями и запустить что-то после того, как каждый постбэк, но должно быть довольно straightfoward способ аналогичным образом в это.

ответ

9

Конкретный пример кода, который вы описываете, не работает с частичными пост-обратными связями, поскольку ClientScript.RegisterStartupScript() записывает JS на страницу во время фазы построения вывода жизненного цикла запроса; тогда как частичная обратная передача только обновляет выбранную часть страницы через JavaScript (даже если на сервере создается разметка для всей страницы, включая сценарий запуска).

Чтобы точно имитировать то, что вы описываете, вы должны включать в себя Буквенный контроль внутри вашего UpdatePanel, и во время частичного постбэка установите свойства текста на панели содержимого в сценарии вы хотите запустить:

myLiteral.Text = "<script type=\"JavaScript\">doStuff();</script>"; 

IMO, более правильный способ заключается в использовании client-side API for async postbacks зарегистрировать обработчик событий для запуска, когда постбэк завершает:

function endRequestHandler(sender, args) { 
    doStuff(); 
} 

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); 

Если вам нужно передать информацию, которая была сгенерирована во время обратной передачи в обработчик, вы можете передать, чточерез скрытые поля и захватить это из DOM в вашем клиентском обработчике.

+0

@Rex Я планировал использовать скрытые поля и обработчик событий, которые всегда файлы, но был прыжок, был механизм, подобный описанному мной. Из того, что я нашел до сих пор, это единственный вариант. – Mark

+0

@Rex Я написал, как я использовал этот метод для достижения той же цели. http://fooberry.com/2009/05/25/running-specific-javascript-after-partial-postback/ – Mark

2

This гораздо более элегантный, ИМО. очевидно, ASP AJAX будет вызывать любую JS-функцию с именем pageLoad. поэтому напишите функцию, называемую pageLoad, и она будет выполняться при каждой загрузке страницы даже после частичного обновления.

1

<script type="text/javascript" language="javascript"> 
    function ValidateUserRole() { 
     var answer = confirm("Are you sure..................") 
     if (answer) { 
      var btnRoleReleatedButton = '<%=btnRoleReleatedButton.ClientID%>'; 
      document.getElementById(btnRoleReleatedButton).click(); 
     } 
     else { 
      return false; 
     } 
    } 
</script> 

Tier 3 :<asp:UpdatePanel ID="upTier3Details" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:DropDownList ID="ddlTier3" runat="server" CssClass="ddlextralarge" Width="350" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ddlUserRole" EventName="SelectedIndexChanged" /> 
    </Triggers> 
</asp:UpdatePanel> 

Смежные вопросы