Я пишу веб-страницу в ASP.NET. У меня есть некоторый код JavaScript, и у меня есть кнопка отправки с событием щелчка.

Можно ли вызвать метод, который я создал в ASP, с помощью события click в JavaScript?

Ну, если вы не хотите делать это с помощью Ajax или любым другим способом и просто хотите, чтобы произошла обычная обратная передача ASP.NET, вот как вы это делаете (без использования каких-либо других библиотек):

Это хотя это немного сложно … :)

я. В своем файле кода (при условии, что вы используете C # и .NET 2.0 или более позднюю версию) добавьте следующий интерфейс к своему классу Page, чтобы он выглядел как

public partial class Default : System.Web.UI.Page, IPostBackEventHandler{}

ii. Это должно добавить (используя ссылается на глобальный объект Я обнаружил, что экспериментирование с различными методами является хорошей проверкой работоспособности даже после хорошего справиться о том, что их различные использования и возможности. ссылается на глобальный объект ) эту функцию в ваш файл кода:

public void RaisePostBackEvent(string eventArgument) { }

iii. В своем событии onclick в JavaScript напишите следующий код:

var pageId = '<%=  Page.ClientID %>';
__doPostBack(pageId, argumentString);

Это вызовет метод RaisePostBackEvent в вашем кодовом файле с параметром eventArgument в качестве аргументаString, который вы передали из JavaScript. Теперь вы можете назвать любое другое событие, которое вам нравится.

П.С .: Это «underscore-underscore-doPostBack» … И в этой последовательности не должно быть пробелов … Каким-то образом ОМУ не позволяет мне писать в подчеркиваниях, за которыми следует символ!

Переменная __doPostBack() метод работает хорошо.

Другое решение (очень хакерское) — просто добавить невидимую кнопку ASP в разметку и щелкнуть по ней методом JavaScript.

<div style="display: none;">
   <asp:Button runat="server" ... OnClick="ButtonClickHandlerMethod" />
</div>

Из вашего JavaScript найдите ссылку на кнопку, используя ее ClientID , а затем вызовите для нее метод . Click () .

var button = document.getElementById(/* button client id */);

button.click();

Переменная Библиотека Microsoft AJAX выполнит это. Вы также можете создать собственное решение, использующее AJAX для вызова собственных файлов сценариев aspx (как в основном) для запуска функций .NET.

Я предлагаю библиотеку Microsoft AJAX. После установки и ссылки вы просто добавляете строку в загрузку вашей страницы или init:

Ajax.Utility.RegisterTypeForAjax(GetType(YOURPAGECLASSNAME))

, который кодирует строку в объект json.

<Ajax.AjaxMethod()> _
Public Function Get5() AS Integer
    Return 5
End Function

Затем вы можете вызывать ее на своей странице как:

PageClassName.Get5(javascriptCallbackFunction);

Последний параметр вашего вызова функции должен быть функцией обратного вызова javascript, которая будет выполняться при возврате запроса AJAX.

Вы можете сделать это асинхронно, используя .NET Ajax PageMethods. Смотрите говорится, что или говорится, что Глядя на вывод

Статическое, строго типизированное программирование всегда было для меня очень естественным, поэтому сначала я сопротивлялся изучению JavaScript (не говоря уже о HTML и CSS), когда мне приходилось создавать веб-интерфейсы для моих приложений. Я бы сделал все, чтобы обойти это, например, перенаправление на страницу просто для выполнения и действия над событием OnLoad, если бы я мог кодировать чистый C #.

Однако вы обнаружите, что если вы собираетесь работать с веб-сайтами, вы должны быть непредвзятыми и начать думать более веб-ориентированными (то есть не пытайтесь делать что-то на стороне клиента на сервере и т. Д.) -versa). Я люблю веб-формы ASP.NET и до сих пор использую их (а также MVC ), но я скажу, что, пытаясь упростить ситуацию и скрывая разделение клиента и сервера, это может сбить с толку новичков и фактически привести к усложняя время от времени.

Мой совет — изучить некоторый базовый JavaScript (как регистрировать события, извлекать объекты DOM, манипулировать CSS и т. Д.), И вы найдете веб-программирование намного более приятным (не говоря уже об упрощении). Многие люди упоминали о различных библиотеках Ajax, но я не видел реальных примеров Ajax, так что вот так. (Если вы не знакомы с Ajax, все это делает асинхронный HTTP-запрос на обновление содержимого (или, возможно, выполнение серверного действия в вашем сценарии) без перезагрузки всей страницы или полной обратной передачи.

Клиент -Side:

<script type="text/javascript">
var xmlhttp = new XMLHttpRequest(); // Create object that will make the request
xmlhttp.open("GET", "http://example.org/api/service", "true"); // configure object (method, URL, async)
xmlhttp.send(); // Send request

xmlhttp.onstatereadychange = function() { // Register a function to run when the state changes, if the request has finished and the stats code is 200 (OK). Write result to <p>
    if (xmlhttp.readyState == 4 && xmlhttp.statsCode == 200) {
          document.getElementById("resultText").innerHTML = xmlhttp.responseText;
    }
};
</script>

Вот и все. Хотя имя может вводить в заблуждение, результат может быть и в виде обычного текста, или в формате JSON, вы не ограничены XML. jQuery предоставляет еще более простой интерфейс для выполнения вызовов Ajax (среди упрощения других задач JavaScript).

Запрос может быть HTTP-POST или HTTP-GET и не обязательно должен быть на веб-странице, но вы можете публиковать сообщения в любой службе, которая прослушивает HTTP-запросы, например RESTful API. Веб-API ASP.NET MVC 4 позволяет настроить веб-службу на стороне сервера обрабатывать запрос также легко, но многие люди не знают, что вы также можете добавить контроллеры API в проект веб-форм и использовать их для обработки Ajax-вызовов, подобных этой.

На стороне сервера:

public class DataController : ApiController
{
    public HttpResponseMessage<string[]> Get()
    {
        HttpResponseMessage<string[]> response = new HttpResponseMessage<string[]>(
            Repository.Get(true),
            new MediaTypeHeaderValue("application/json")
        );

        return response;
    }
}

Global.asax

Затем просто зарегистрируйте HTTP-маршрут в файле Global.asax, чтобы ASP.NET знал, как направить запрос.

void Application_Start(object sender, EventArgs e)
{
    RouteTable.Routes.MapHttpRoute("Service", "api/{controller}/{id}");
}

С помощью AJAX и контроллеров вы можете в любое время выполнить асинхронную отправку на сервер для выполнения любой операции на стороне сервера. Этот один-два удара обеспечивает как гибкость JavaScript, так и мощь C # / ASP.NET, давая людям, посещающим ваш сайт, общее удобство работы. Не жертвуя ничем, вы получаете лучшее из обоих миров.

, что, в свою очередь, нарушает Magento. (Пока вы не найдете проблему, вы можете потратить много часов на ее устранение)

Я думаю, что сообщение в блоге Как получить & Amp ; показ данных базы данных SQL Server на странице ASP.NET с помощью Ajax (jQuery) поможет вам.

JavaScript Code

<script src="http://code.jquery.com/jquery-3.3.1.js" />
<script language="javascript" type="text/javascript">

    function GetCompanies() {
        $("#UpdatePanel").html("<div style='text-align:center; background-color:yellow; border:1px solid red; padding:3px; width:200px'>Please Wait...</div>");
        $.ajax({
            type: "POST",
            url: "Default.aspx/GetCompanies",
            data: "{}",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: OnSuccess,
            error: OnError
        });
    }

    function OnSuccess(data) {
        var TableContent = "<table border='0'>"  
                                "<tr>"  
                                    "<td>Rank</td>"  
                                    "<td>Company Name</td>"  
                                    "<td>Revenue</td>"  
                                    "<td>Industry</td>"  
                                "</tr>";
        for (var i = 0; i < data.d.length; i  ) {
            TableContent  = "<tr>"  
                                    "<td>"  data.d[i].Rank  "</td>"  
                                    "<td>" data.d[i].CompanyName "</td>"  
                                    "<td>" data.d[i].Revenue "</td>"  
                                    "<td>" data.d[i].Industry "</td>"  
                                "</tr>";
        }
        TableContent  = "</table>";

        $("#UpdatePanel").html(TableContent);
    }

    function OnError(data) {

    }
</script>

Серверная функция ASP.NET

[WebMethod]
[ScriptMethod(ResponseFormat= ResponseFormat.Json)]
public static List<TopCompany> GetCompanies()
{
    System.Threading.Thread.Sleep(5000);
    List<TopCompany> allCompany = new List<TopCompany>();
    using (MyDatabaseEntities dc = new MyDatabaseEntities())
    {
        allCompany = dc.TopCompanies.ToList();
    }
    return allCompany;
}

библиотекой Microsoft AJAX, позволят это сделать. Вы также можете создать собственное решение, использующее AJAX для вызова собственных файлов сценариев aspx (как в основном) для запуска функций .NET.

Это библиотека с именем AjaxPro, которая была написана MVP с именем Michael Schwarz . Эта библиотека не была написана Microsoft.

Я широко использовал AjaxPro, и это очень хорошая библиотека, которую я бы рекомендовал для простых обратных вызовов на сервер. Это работает хорошо с версией Microsoft Ajax без проблем. Тем не менее, я хотел бы заметить, с тем, как легко Microsoft сделала Ajax, я бы использовал его, только если это действительно необходимо. Для выполнения действительно сложной функциональности, которую вы получаете от Microsoft, требуется много JavaScript, просто поместив его в панель обновлений.

Это так просто для обоих сценариев (то есть синхронных / асинхронных), если вы хотите запустить обработчик событий на стороне сервера, например, событие нажатия кнопки.

Для запуска обработчика событий элемента управления: если вы уже добавили ScriptManager на свою страницу, пропустите шаг 1.

  1. Добавьте следующее в раздел сценария клиента вашей страницы

    //<![CDATA[
    var theForm = document.forms['form1'];
    if (!theForm) {
        theForm = document.form1;
    }
    function __doPostBack(eventTarget, eventArgument) {
        if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
            theForm.__EVENTTARGET.value = eventTarget;
            theForm.__EVENTARGUMENT.value = eventArgument;
            theForm.submit();
        }
    }
    //]]>
    
    1. Напишите свой обработчик событий на стороне сервера для своего элемента управления

      Защищенный void btnSayHello_Click (отправитель объекта, EventArgs e) {Label1.Text = «Hello World …» ;}

    2. Добавьте клиентскую функцию для вызова обработчика событий на стороне сервера

      function SayHello () {__doPostBack («btnSayHello», «») ;}

Замените «btnSayHello» в приведенном выше коде на ваш идентификатор клиента элемента управления

При этом, если ваш элемент управления находится внутри панели обновления, страница не будет обновляться. Это так просто.

Еще одна вещь, которую нужно сказать: будьте осторожны с идентификатором клиента, потому что это зависит от вашей политики генерации идентификатора, определенной свойством ClientIDMode. Элемент

Я пытаюсь реализовать это, но это не работает правильно. Страница отправляется обратно, но мой код не выполняется. Когда я отлаживаю страницу, RaisePostBackEvent никогда не запускается. Одна вещь, которую я сделал по-другому, я делаю это в пользовательском элементе управления вместо страницы ASPX.

Если кто-то похож на Мерк, и у меня возникают проблемы с этим, у меня есть решение:

Когда у вас есть пользовательский элемент управления, кажется, что вы также должны создать PostBackEventHandler на родительской странице. И затем вы можете вызвать PostBackEventHandler пользовательского элемента управления, вызвав его напрямую. Смотрите ниже:

public void RaisePostBackEvent(string _arg)
{
    UserControlID.RaisePostBackEvent(_arg);
}

Где UserControlID — это идентификатор, который вы дали пользовательскому элементу управления на родительской странице, когда вложили его в разметку.

Примечание: Вы также можете просто просто вызвать методы, принадлежащие этому пользовательскому элементу управления напрямую (в этом случае вы бы только нужен обработчик RaisePostBackEvent на родительской странице):

public void RaisePostBackEvent(string _arg)
{
    UserControlID.method1();
    UserControlID.method2();
}

Возможно, вы захотите создать веб-сервис для ваших общих методов.
Просто добавьте атрибут WebMethodAttribute поверх функций, которые вы хотите вызвать, и это все.
Наличие веб-службы со всеми вашими обычными вещами также облегчает обслуживание системы.

Если функция __doPostBack не генерируется на странице, вам нужно вставить элемент управления, чтобы заставить его выглядеть следующим образом:

<asp:Button ID="btnJavascript" runat="server" UseSubmitBehavior="false" />

Относительно:

var button = document.getElementById(/* Button client id */);

button.click();

Это должно быть похоже на:

var button = document.getElementById('<%=formID.ClientID%>');

Где formID — это идентификатор элемента управления ASP.NET. в файле .aspx.

Добавьте эту строку в загрузку страницы, если вы получаете объект ожидаемой ошибки.

ClientScript.GetPostBackEventReference(this, "");

Вы можете использовать PageMethods.Your C# method Name для доступа к методам C # или VB.NET в JavaScript.

Попробуйте:

if(!ClientScript.IsStartupScriptRegistered("window"))
{
    Page.ClientScript.RegisterStartupScript(this.GetType(), "window", "pop();", true);
}

Или это

Response.Write("<script>alert('Hello World');</script>");

Используйте свойство OnClientClick кнопки для вызова функций JavaScript …

Вы также можете получить его, просто добавив эту строку в свой код JavaScript:

document.getElementById('<%=btnName.ClientID%>').click()

Я думаю, что это очень легко!

Пожалуйста, попробуйте это:

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

ddlVoucherType — это элемент управления, который вызовет выбранное изменение индекса … И вы можете поместить любую функцию в выбранное изменение индекса этого элемента управления.

Самый простой и лучший способ добиться этого — использовать onmouseup() событие JavaScript вместо onclick()

. Таким образом, вы будете запускать JavaScript после нажатия, и это не будет мешать ASP OnClick() Относится к элементу DOM, который сгенерировал событие.

. Я пробую это и чтобы я мог запустить метод Asp.Net при использовании jQuery.

  1. Выполните перенаправление страницы в своем коде jQuery

    window.location = "Page.aspx?key=1";
    
  2. Затем используйте строку запроса при загрузке страницы

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["key"] != null)
        {
            string key= Request.QueryString["key"];
            if (key=="1")
            {
                // Some code
            }
        }
    }
    

Так что нет необходимости запускать дополнительный код

Этот ответ работает для меня как бриз, благодаря кросс-браузерной программе: Метод __doPostBack () работает хорошо.

Из вашего JavaScript извлеките ссылку на кнопку, используя ее ClientID, а затем вызовите для нее метод .Click ():

Другое решение (очень хакерское) — просто добавить невидимую кнопку ASP в разметку и щелкнуть по ней методом JavaScript.

<div style="display: none;"> 
    <asp:Button runat="server" ... OnClick="ButtonClickHandlerMethod" /> 
</div> 

Blockquote

var button = document.getElementByID(/* button client id */); 

button.Click(); 

javascript — селектор jQuery для входных данных с квадратными скобками в атрибуте имени — Stack Overflow