Как использовать __doPostBack()
Я пытаюсь создать asyncrhonous postback в ASP.NET с помощью __doPostBack()
, но я понятия не имею, как это сделать. Я хочу использовать ванильный JavaScript.
Что-то простое, как щелчок на кнопке, может привести к срабатыванию события __doPostBack()
. Я просто пытаюсь узнать, как работает механизм.
Ответы
Ответ 1
Вы можете попробовать это в своей веб-форме с помощью кнопки btnSave, например:
<input type="button" id="btnSave" onclick="javascript:SaveWithParameter('Hello Michael')" value="click me"/>
<script type="text/javascript">
function SaveWithParameter(parameter)
{
__doPostBack('btnSave', parameter)
}
</script>
И в вашем коде позади добавьте что-то вроде этого, чтобы прочитать значение и действовать на нем:
public void Page_Load(object sender, EventArgs e)
{
string parameter = Request["__EVENTARGUMENT"]; // parameter
// Request["__EVENTTARGET"]; // btnSave
}
Дайте нам попробовать и сообщите нам, если бы это сработало для вас.
Ответ 2
Это также хороший способ получить серверные элементы управления для обратной передачи внутри FancyBox и/или jQuery Dialog.
Например, в FancyBox-div:
<asp:Button OnClientClick="testMe('param1');" ClientIDMode="Static" ID="MyButton" runat="server" Text="Ok" >
</asp:Button>
JavaScript:
function testMe(params) {
var btnID= '<%=MyButton.ClientID %>';
__doPostBack(btnID, params);
}
Серверная сторона Page_Load:
string parameter = Request["__EVENTARGUMENT"];
if (parameter == "param1")
MyButton_Click(sender, e);
Ответ 3
Вот краткое руководство о том, как работает __doPostBack()
.
Если честно, я этим мало пользуюсь; по крайней мере, напрямую. Многие серверные элементы управления (например, Button
, LinkButton
, ImageButton
, части GridView
и т.д.) Используют __doPostBack
качестве механизма обратной отправки.
Ответ 4
Я просто хотел бы добавить что-то в этот пост для asp:button
. Я пробовал clientId и, похоже, не работает для меня:
__doPostBack('<%= btn.ClientID%>', '');
Однако получение UniqueId, похоже, отправляется обратно на сервер, как показано ниже:
__doPostBack('<%= btn.UniqueID%>', '');
Это может помочь кому-то еще в будущем, поэтому опубликуйте это.
Ответ 5
Старый вопрос, но я хотел бы кое-что добавить: при вызове doPostBack()
вы можете использовать метод действия сервера для действия.
Для примера:
__doPostBack('<%= btn.UniqueID%>', 'my args');
Сработает на сервере:
protected void btn_Click(object sender, EventArgs e)
Я не нашел лучшего способа получить аргумент, поэтому я все еще использую Request["__EVENTARGUMENT"]
.
Ответ 6
Как уже говорили другие, вам необходимо предоставить UniqueID элемента управления методу __doPostback().
__doPostBack('<%= btn.UniqueID %>', '');
На сервере отправленные значения формы идентифицируются атрибутом name полей на странице.
Причина, по которой работает UniqueID, заключается в том, что UniqueID и имя фактически совпадают, когда серверный элемент управления отображается в HTML.
Вот статья, которая описывает, что такое UniqueID:
Свойство UniqueID также используется для предоставления значения для атрибута HTML "имя" полей ввода (флажки, раскрывающиеся списки и скрытые поля). UniqueID также играет важную роль в постбэках. Свойство UniqueID серверного элемента управления, который поддерживает обратные передачи, предоставляет данные для скрытого поля __EVENTTARGET. Затем ASP.NET Runtime использует поле __EVENTTARGET, чтобы найти элемент управления, который вызвал обратную передачу, а затем вызывает его метод RaisePostBackEvent.
источник: https://www.telerik.com/blogs/the-difference-between-id-clientid-and-uniqueid
Ответ 7
Я столкнулся с тем же феноменом... когда я заканчивал работу над сайтом для настольных компьютеров, а затем удалял свою норвежскую телефонную подписку, снова включив ее с помощью смс-входа.