Скрипт запуска не запускается во время частичного обновления - PullRequest
0 голосов
/ 03 декабря 2009

У меня есть пользовательский элемент управления с именем MyUpdateControl, который запускает сценарий запуска - его HTML просто:

<div id="updatableArea"></div>

Скрипт запуска добавлен в OnLoad () пользовательского элемента управления:

string doUpdateScript = String.Format(
    "DoUpdate('{0}')",
    someValue);
this.Parent.Page.ClientScript.RegisterStartupScript(typeof(Page), "DoUpdateScript", doUpdateScript);

Пользовательский элемент управления MyUpdateControl иногда содержится в панели обновления в другом пользовательском элементе управления:

<asp:UpdatePanel ID="myUpdatePanel" runat="server" >  
    <ContentTemplate>
        <UC1:MyUpdateControl ID="myUpdaterControl" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

В этих случаях скрипт запускается только при первой загрузке страницы. Он никогда не срабатывает во время асинхронной обратной передачи. Как я могу гарантировать, что он также вызывается во время асинхронных обратных передач?

1 Ответ

1 голос
/ 03 декабря 2009

Вам необходимо использовать ScriptManager.RegisterStartupScript при регистрации скрипта в UpdatePanel вместо ClientScript.RegisterStartupScript. Этот метод перегружен, и ожидается, что элемент управления, регистрирующий блок клиентского скрипта в качестве первого параметра.

public class MyUpdateControl  : Control
{
    public MyUpdateControl()
    {         
    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        //..
        string doUpdateScript = String.Format(
            "DoUpdate('{0}')", someValue);
        ScriptManager.RegisterStartupScript(this, GetType(),
             "ServerControlScript", script, true);
        //..
    }
}

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

public partial class MyUpdateControl : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {       
        //..
        string doUpdateScript = String.Format(
            "DoUpdate('{0}')", someValue);
        ScriptManager.RegisterStartupScript(this, GetType(),
             "ServerControlScript", script, true);
        //..
    }
}
...