Как использовать __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

Я столкнулся с тем же феноменом... когда я заканчивал работу над сайтом для настольных компьютеров, а затем удалял свою норвежскую телефонную подписку, снова включив ее с помощью смс-входа.