#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
. Моя ошибка.