it-swarm.com.ru

Как использовать __doPostBack ()

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

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

146
Michael Kerute

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

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

141
Mr. Mr.

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

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

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

13
kbrimington

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

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

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

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

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

7
TheUknown

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

Для примера:

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

Сработает на сервере:

protected void btn_Click(object sender, EventArgs e)

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

2
Anderson Pimentel

Как уже говорили другие, вам необходимо предоставить 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

0
jBelanger