Как контролировать, какой JavaScript запускается после частичной обратной передачи UpdatePanel endRequest? - PullRequest
6 голосов
/ 23 мая 2009

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

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

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

Ответы [ 4 ]

9 голосов
/ 23 мая 2009

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

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

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

IMO, более правильным способом является использование клиентского API для асинхронных обратных передач , чтобы зарегистрировать обработчик событий, запускаемый после завершения обратной передачи:

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

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

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

2 голосов
/ 15 декабря 2010

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

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

<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>

0 голосов
/ 07 августа 2010

лучший способ сделать это - использовать элемент управления DoAfterPostBack. Вы можете скачать этот элемент управления бесплатно здесь http://go2amitech.blogspot.com/2010/08/running-specific-javascript-after.html

...