Как использовать __doPostBack () - PullRequest
147 голосов
/ 28 августа 2010

Я пытаюсь создать асинхронную обратную передачу в ASP.NET, используя __doPostBack(), но я не знаю, как это сделать. Я хочу использовать ванильный JavaScript.

Что-то простое, например, нажатие кнопки, может вызвать событие __doPostBack(). Я просто пытаюсь узнать, как работает механизм.

Ответы [ 6 ]

142 голосов
/ 12 октября 2010

Вы можете попробовать это в своей веб-форме с помощью кнопки с именем 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
}

Попробуйте и дайте нам знать, сработало ли это для вас.

23 голосов
/ 13 сентября 2013

Это также хороший способ заставить серверные элементы управления выполнять обратную передачу внутри 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);
13 голосов
/ 28 августа 2010

Вот краткий учебник о том, как работает __doPostBack().

Если честно, я этим мало пользуюсь; по крайней мере, напрямую. Многие серверные элементы управления (например, Button, LinkButton, ImageButton, части GridView и т. Д.) Используют __doPostBack в качестве механизма обратной передачи.

7 голосов
/ 08 июня 2016

Я просто хотел бы добавить что-то к этому сообщению для asp:button.Я попробовал clientId, и он, похоже, не работает для меня:

__doPostBack('<%= btn.ClientID%>', '');

Однако получение UniqueId, похоже, отправляет обратно на сервер, как показано ниже:

__doPostBack('<%= btn.UniqueID%>', '');

Это может помочь кому-то еще в будущем, следовательно, опубликовать это.

2 голосов
/ 08 июня 2018

Старый вопрос, но я бы хотел кое-что добавить: при вызове doPostBack() вы можете использовать метод действия сервера для действия.

Для примера:

__doPostBack('<%= btn.UniqueID%>', 'my args');

Запустится, на сервере:

protected void btn_Click(object sender, EventArgs e)

Я не нашел лучшего способа получить аргумент, поэтому я все еще использую Request["__EVENTARGUMENT"].

0 голосов
/ 05 марта 2019

Как уже говорили другие, вам необходимо предоставить UniqueID элемента управления методу __doPostback ().

__doPostBack('<%= btn.UniqueID %>', '');

На сервере отправленные значения формы идентифицируются атрибутом name полей на странице.

Причина, по которой работает UniqueID , заключается в том, что UniqueID и name фактически являются одинаковыми при отображении серверного элемента управления в HTML.

Вот статья, которая описывает, что такое UniqueID:

Свойство UniqueID также используется для предоставления значения для HTML атрибут name в полях ввода (флажки, выпадающие списки и скрытые поля). UniqueID также играет важную роль в постбэках. Свойство UniqueID серверного элемента управления, который поддерживает обратные передачи, предоставляет данные для скрытого поля __EVENTTARGET. ASP.NET Runtime затем использует поле __EVENTTARGET, чтобы найти элемент управления, который сработал обратную передачу, а затем вызывает ее метод RaisePostBackEvent.

ЦСИ: https://www.telerik.com/blogs/the-difference-between-id-clientid-and-uniqueid

...