Обновите UpdatePanel вручную, используя JavaScript или jQuery - PullRequest
12 голосов
/ 16 августа 2010

Можно ли обновить UpdatePanel вручную, используя JavaScript или jQuery?

У меня есть TextBox вверху моей страницы.Когда пользователь покидает этот TextBox, я хочу запустить некоторый серверный код (он добавит запись в мою базу данных), а затем внизу страницы у меня появляется UpdatePanel, который обновляется.UpdatePanel имеет GridView, в который будет добавлена ​​запись для добавленной записи)

Ответы [ 8 ]

21 голосов
/ 16 августа 2010

Просто вызовите эту функцию JavaScript.Здесь UpdatePanel1 является идентификатором панели обновления

 <script type="text/javascript">

            var UpdatePanel1 = '<%=UpdatePanel1.ClientID%>';

            function ShowItems()
            {
               if (UpdatePanel1 != null) 
               {
                   __doPostBack(UpdatePanel1, '');
               }
            }       

        </script>
12 голосов
/ 16 августа 2010

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

__doPostBack('<%= Button.ClientID %>','');
9 голосов
/ 27 ноября 2015

Хотя это старый вопрос, я думаю, что он заслуживает упоминания еще одного решения.

Если вы не хотите полагаться на скрытые кнопки или призрачный __doPostBack, есть опция «ClientScript.GetPostBackEventReference», как описано на этой (также довольно старой, но все еще отличной) странице:

http://www.4guysfromrolla.com/articles/033110-1.aspx

Короче говоря, если ваша UpdatePanel объявлена ​​так:

<asp:UpdatePanel ID="MyUpdatePanel" runat="server">...</UpdatePanel>

затем в JavaScript вы можете вызвать скрипт, сгенерированный этим серверной частью код:

ClientScript.GetPostBackEventReference(MyUpdatePanel, "")

Так что на вашей странице aspx вы можете получить что-то вроде этого:

function MyJavaScriptFunction(){
   doSomeStuff();
   <%=ClientScript.GetPostBackEventReference(MyUpdatePanel, "")%>
}

Код между <% и%> будет заменен реальным вызовом javascript при анализе страницы, поэтому вы можете посмотреть его, просмотрев исходный код страницы в браузере.

Это может быть не проще, чем в других ответах, но я предпочитаю его, так как он не вводит никаких дополнительных элементов и __doPostBack выглядит как хак.: -)

3 голосов
/ 18 июля 2011

Ну, в моем случае ответом было использование UniqueID.ClientID не работал.

 __doPostBack("<%=btnTest.UniqueID %>", "");

Это работает отлично.Не спрашивай меня почему.

1 голос
/ 28 июня 2013

Создать функцию для асинхронной обратной передачи:

    function __doPostBackAsync(eventName, eventArgs) {
        var prm = Sys.WebForms.PageRequestManager.getInstance();

        if (!Array.contains(prm._asyncPostBackControlIDs, eventName)) {
            prm._asyncPostBackControlIDs.push(eventName);
        }

        if (!Array.contains(prm._asyncPostBackControlClientIDs, eventName)) {
            prm._asyncPostBackControlClientIDs.push(eventName);
        }

        __doPostBack(eventName, eventArgs);
    }

Вызывайте эту функцию там, где вам нужно (в событии щелчка, событии загрузки, ...):

 __doPostBackAsync("UpdatePanel1", "");

В codebehind Page_Load проверьте асинхронную обратную передачу и обновите нужную UpdatePanel:

if (scriptManager.IsInAsyncPostBack)
{
      if (Request["__EVENTTARGET"] == UpdatePanel1.ID)
      {
         ...

         //Do update
         UpdatePanel1.Update();
      }
}
0 голосов
/ 23 июня 2015

Это работает для меня:

<asp:UpdatePanel id="pnl" UpdateMode="Conditional" runat="server">
 <contentemplate>
    <div>...your content...</div>
     <div style="display: none; line-height: 0pt;">
        <asp:Button id="btnUpdate" runat="server" UseSubmitBehavior="false"  />
     </div>
</contentemplate>
</asp:UpdatePanel> 

JavaScript:

function doUpdate()
{
  var btn = document.getElementById("<%#= btnUpdate.ClientID %>");
  if(btn != null) { btn.click(); }
}
0 голосов
/ 16 апреля 2014

Вам просто нужно вызвать change () для управляющей ведьмы, сработавшей в вашей панели обновления.

Например:

  <asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="updatePanel1" ChildrenAsTriggers="True">
    <ContentTemplate>
      <asp:DropDownList ID="ddl" runat="server" Visible="true" AutoPostBack="true" CssClass='someClass' />
    </ContentTemplate>
    <Triggers>
     <asp:AsyncPostBackTrigger ControlID="ddl" EventName="SelectedIndexChanged" />
    </Triggers>
  </asp:UpdatePanel


<script>          
  $(".someClass").change();
 </script>
0 голосов
/ 11 сентября 2013

ASPX:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_OnLoad" > ...

CodeBehind:

protected void UpdatePanel1_OnLoad(object sender, EventArgs e)
{
    var rawArguments = Page.Request["__EVENTARGUMENT"];
    if(rawArguments != null)
    {
        var arguments = HttpUtility.ParseQueryString(rawArguments);

        switch (arguments["EventName"])
        {
            case "Event1":
                var parameter1Value = arguments["parameter1"];
                var parameter2Value = arguments["parameter2"];
                break;
        }
    }
}

Javascript:

function updatePanelPartialPostback(updatepanelId, eventName, parameters) {
    var parametersParsed = "EventName=" + eventName + "&";

    for (var propertyName in parameters) {
        parametersParsed += propertyName + '=' + parameters[propertyName] + '&';
    }

    __doPostBack(updatepanelId, parametersParsed);
}


updatePanelPartialPostback('<%= UpdatePanel1.ClientID %>', 'Event1', { parameter1: 'value1', parameter2: 'value2' });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...