Ответ Ли в основном правильный и может хорошо сработать для вас. Тем не менее, вы не должны просто использовать __doPostBack
и полагаться, что он всегда будет «волшебным» для вас. Этот метод и переменные, упомянутые Ли, являются внутренними для ASP.NET и не предназначены для непосредственного использования. Кроме того, если вы не разместите на своей странице какой-либо элемент управления обратной передачей, этот метод на самом деле не будет сгенерирован, и ваш код, вызывающий его, потерпит неудачу.
К счастью, код для генерации и обработки обычной обратной передачи очень прост. Вместо использования встроенных обработчиков событий элементов управления вводом (которые должны быть сконструированы до запуска - следовательно, вызов CreateChildControls
перед вызовом вашего обработчика) вы бы нацелили обратную передачу на саму веб-часть. :
public class MyWebPart : WebPart, IPostBackEventHandler {
protected override void CreateChildControls() {
Control clickable = ...; // Create a clickable control.
// Get JavaScript expression to send postback "test" to "this" web part.
var postBack = Page.ClientScript.GetPostBackEventReference(this, "test");
clickable.Attributes["onclick"] = postBack + "; return false";
Controls.Add(clickable);
}
void IPostBackEventHandler.RaisePostBackEvent(string eventArgument) {
if (eventArgument == "test") { // Recognize and handle our postback.
...
}
}
}
GetPostBackEventReference
сгенерирует необходимое выражение JavaScript для вас. (И на самом деле, просто вызывая его, __doPostBack
«магически» появляется на странице.) RaisePostBackEvent
будет вызываться между OnLoad
и OnPreRender
. Следите за тем, чтобы дочерние элементы управления не создавались до этого (например, вызывая EnsureChildControls
или любым другим способом). Если вам нужно несколько элементов управления обратной передачей, параметр eventArguments
позволит вам отличаться между ними.
Вам нужны триггеры обратной передачи в ваших пользовательских элементах управления, а не непосредственно в веб-части. Я показал это в веб-части просто для простоты. Вы можете поместить результат GetPostBackEventReference
в любой элемент управления, если при вызове вы используете правильные экземпляры Page и веб-части.
--- Ферда