Вызов ASP.NET EventHandler из JavaScript - PullRequest
2 голосов
/ 30 января 2012

У меня есть традиционная веб-форма ASP.NET. Раньше у нас была кнопка, определяемая следующим образом:

<asp:Button ID="myButton" Runat="server" OnClick="myButton_Click" />

На странице .aspx.cs у меня есть следующее:

protected void myButton_Click(object sender, EventArgs e)
{
  // Do Stuff
}

Однако теперь кто-то решил использовать причудливую среду JavaScript. По сути, у меня просто есть:

  <input type="button" id="myButton" onclick="someJSFunction()" />
  <script type="text/javascript">
    function someJSFunction() {
      // Need to execute "myButton_Click" here.
    }
  </script>

Как мне на самом деле выполнить мой оригинальный метод на сервере? Я знаю, что это очень странный вопрос. Я упростил код, чтобы попытаться напрямую объяснить, чего я пытаюсь достичь. Может кто-нибудь подскажите, пожалуйста, как это сделать?

Большое спасибо!

Ответы [ 3 ]

7 голосов
/ 30 января 2012

Вы можете написать в

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

или чуть лучше и меньше подвержено ошибкам использования ASP.Net ClientScriptManager

<%= Page.ClientScript.GetPostBackEventReference(myButton, String.Empty) %>; 

Второй на самом деле пишет __doSubmit под прикрытием, но вы получаете платформу ASP.Net, которая сделает это за вас. Также первый из них отправит обратно страницу, а второй инициирует правильные события на стороне сервера. Он намного лучше интегрируется в архитектуру ASP.Net. Либо будет работать, хотя.

Этот недавний ТАК * вопрос объясняет все это гораздо лучше, чем я могу (или, скорее, сделал в то время)

0 голосов
/ 13 августа 2014

Прежде всего, что бы ни делала ваша кнопка, фактический код для выполнения этой функции не должен быть в коде позади кнопки;он должен быть в методе, который называется кодом за кнопкой.Обработчики событий кнопки никогда не должны использоваться непосредственно каким-либо объектом, кроме кнопки.Поэтому ваш обработчик кнопок должен выглядеть следующим образом:

protected void Button1_Click(object sender, EventArgs e)
{
   CallMyRealMethod();
}

Далее проверьте SignalR .(http://signalr.net) SignalR (в двух словах) позволяет вам вызывать методы C # из вашего javascript и методы javascript из C #.

Использование этих двух методов может сделать ваш код намного более читабельным и поддерживаемым.

0 голосов
/ 30 января 2012

попробуйте это:

<input type="button" id="myButton" onclick="someJSFunction(); __doPostBack('myButton','OnClick');" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...