asp.net — сделать AsyncPostBack с помощью js

#javascript #asp.net #ajax #asp.net-ajax

#javascript #asp.net #ajax #asp.net-ajax

Вопрос:

Я потратил почти 3 часа на следующий случай:

  • Я хочу запустить AsyncPostBack из JavaScript, но иметь возможность отправлять тот же параметр также потому, что он мне нужен на стороне сервера.

Я перепробовал много ситуаций, но не могу найти четкий пример.

У меня есть панель обновления, и когда я нажимаю на определенную кнопку изображения внутри нее, отображается всплывающее окно. (всплывающее окно изначально скрыто, и когда запрос выполнен, display:none оно удалено => оно отображается нормально)

  function BeginRequestHandler(sender, args) {
    }
    function EndRequestHandler(sender, args) {
        document.getElementById('popup').style.display = '';
        document.getElementById('overlay').style.display = '';

    }
  

Ну, проблема в том, что мне нужно создать функцию js для выполнения asyncPostBack, потому что эта функция js будет вызываться из элемента управления flash при щелчке по некоторой части этого элемента управления, поэтому я хочу имитировать мой щелчок по изображению.(потому что щелчок по этому всплывающему окну отображается так, как вы видите выше)

Проблема в том, что я нигде не могу найти такой пример. Эта функция js получит параметр, поэтому, когда я выполняю обратную отправку, я хочу иметь возможность получить этот параметр на стороне сервера.(эти параметры, по-видимому, являются основной проблемой = — как я отправляю его на сервер, когда я выполняю обратную отправку?).

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

Большое спасибо!

ОБНОВЛЕНИЕ: Пожалуйста, обратите внимание, что первый случай, который я уже сделал, используя ImageButton в моей панели обновлений:

 <asp:ImageButton ID="lnkDetails" runat="server" ImageUrl='<%# DataBinder.Eval(Container.DataItem, "Logo") %>'
                            AlternateText='<%# DataBinder.Eval(Container.DataItem, "Name") %>' OnCommand="lnkDetails_Command"
                            CommandArgument='<%# DataBinder.Eval(Container.DataItem, "TenantID") %>' Text="Click">
                        </asp:ImageButton></li>
  

Что мне нужно, так это «имитировать» этот щелчок, используя javascript для возврата асинхронной отправки (потому что, когда я буду звонить из flash, flash control вызовет мой метод js для обратной отправки)

Ответ №1:

Чтобы инициировать асинхронную обратную отправку из javascript:

 __doPostBack(target,args)
  

target — это уникальный идентификатор панели обновления, на которую вы хотите настроить таргетинг. Обычно он отлично работает, просто передавая пустую строку (обновит все панели автоматического обновления).

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

Оба будут доступны вам на сервере:

 Request.Form["__EVENTTARGET"]
Request.Form["__EVENTARGUMENT"]
  

Ответ №2:

Это должно работать достаточно хорошо:

 <asp:ImageButton ID="ImageButton1" runat="server" OnClientClick='return doSomething(<%#Eval("SomeValue")%>);' />
  

РЕДАКТИРОВАТЬ: попробуйте обернуть вашу функцию JavaScript следующим образом:

 Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function () {
    doSomething = function(argument){
        __doPostBack("<%=ImageButton1.ClientID%>", argument);
        return true; //don't know if you need this
    }
});
  

РЕДАКТИРОВАТЬ: проверьте свой ScriptManager и убедитесь, что EnablePartialRendering для него установлено значение true.

 <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" ... />
  

В коде, лежащем в основе:

 protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    //call the RaisePostBack event 
    base.RaisePostBackEvent(source, eventArgument);

    if (source == ImageButton1)
    {
        string arg = eventArgument;
    }
}
  

Комментарии:

1. Спасибо! но есть ли какой-нибудь способ избежать полного обновления страницы? Потому что я попробовал doPostBack, и вся страница обновляется…

2. Хм … это должно быть асинхронно, поскольку кнопка ImageButton находится на панели обновления. Можете ли вы опубликовать свою разметку?

3. Спасибо, Джеймс, пожалуйста, посмотрите мое обновление. В принципе, то, что вы здесь разместили, я уже сделал. Теперь я только хочу создать метод js для имитации всего этого (выполнить asyncPostBack, отправить определенный параметр, и чтобы я мог перехватить этот параметр на стороне сервера).

4. Одна небольшая проблема? Можете ли вы сказать мне sender , в каком методе я должен объявить?

5. Извините, этого source не должно быть sender . Моя ошибка.