Я пишу веб-страницы в ASP.NET. У меня есть некоторый код JavaScript, и у меня есть кнопки отправки с событием щелчка.
Можно ли вызвать метод, который я создал в ASP с событием мыши в JavaScript?
Я пишу веб-страницы в ASP.NET. У меня есть некоторый код JavaScript, и у меня есть кнопки отправки с событием щелчка.
Можно ли вызвать метод, который я создал в ASP с событием мыши в JavaScript?
Библиотека Microsoft AJAX выполнит это. Вы также можете создать свое собственное решение , которое включает в себя использование AJAX для вызова собственного ASPX (как в основном) файлов сценарии для запуска функции .NET.
Я предлагаю библиотеку Microsoft AJAX. После установки и ссылок, вы просто добавить строку в загрузке страницы или инициализации:
Ajax.Utility.RegisterTypeForAjax(GetType(YOURPAGECLASSNAME))
После этого вы можете делать такие вещи, как:
<Ajax.AjaxMethod()> _
Public Function Get5() AS Integer
Return 5
End Function
Затем, вы можете вызвать его на странице, как:
PageClassName.Get5(javascriptCallbackFunction);
Последний параметр вашего вызова функции должен быть Javascript функции обратного вызова, которая будет выполнена, когда запрос AJAX возвращается.
Ну, если вы не хотите, чтобы сделать это с помощью Ajax или любым другим способом и просто хотите нормальный ASP.NET постбэк произойдет, вот как вы это делаете (без использования каких-либо других библиотек):
Это немного сложнее, хотя ... :)
я. В файле кода (если вы используете C # и .NET 2.0 или более поздней версии) добавьте следующий интерфейс к классу страницы, чтобы сделать его похожим
public partial class Default : System.Web.UI.Page, IPostBackEventHandler{}
II. Это должно добавить ( с помощью Tab- Tab) эту функцию в файл кода:
public void RaisePostBackEvent(string eventArgument) { }
III. В вашем случае OnClick в JavaScript, написать следующий код:
var pageId = '<%= Page.ClientID %>';
__doPostBack(pageId, argumentString);
Это будет вызывать метод «RaisePostBackEvent» в файле код с «eventArgument» как «argumentString», переданными из JavaScript. Теперь, вы можете назвать любое другое событие, которое вы любите.
PS: То есть «подчеркивание-подчеркивание-doPostBack» ... И, не должно быть никакого места в этой последовательности ... Как-то ОМП не позволяет мне писать подчеркивания следует символ!
Вы можете создать веб - сервис для ваших общих методов.
Просто добавьте WebMethodAttribute на себя функции , которые вы хотите позвонить, и именно об этом.
Наличие веб - сервис всем своим общим материалом также делает систему проще в обслуживании.
__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.
Это библиотека называется AjaxPro , который написал MVP по имени Майкл Шварц . Это была библиотека не была написана Microsoft.
Я использовал AjaxPro широко, и это очень хорошая библиотека, что я бы рекомендовал для простых обратных вызовов на сервер. Он делает хорошо функционировать с версией Microsoft Аякса без каких-либо проблем. Тем не менее, я хотел бы отметить, с тем, как легко Microsoft сделала Ajax, я хотел бы использовать его только тогда, когда это действительно необходимо. Это занимает много JavaScript, чтобы сделать некоторые действительно сложные функциональные возможности, которые вы получаете от Microsoft, просто сбросив его в панель обновления.
Этот ответ работает как ветер для меня спасибо крестика браузера:
Метод __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();
Blockquote
Если функция __doPostBack не генерируются на странице вам необходимо вставить элемент управления, чтобы заставить его так:
<asp:Button ID="btnJavascript" runat="server" UseSubmitBehavior="false" />
Добавьте эту строку загрузки страницы, если вы получаете объект ожидается ошибку.
ClientScript.GetPostBackEventReference(this, "");
Вы можете использовать PageMethods.Your C# method Name
для того , чтобы получить доступ к методам # C или методы VB.NET в JavaScript.
Это так легко для обоих сценариев (то есть синхронный / асинхронный), если вы хотите, чтобы вызвать обработчик события на стороне сервера, например, события нажатия кнопки.
Для запуска обработчика событий для элемента управления: Если вы добавили ScriptManager на странице уже затем пропустите шаг 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();
}
}
//]]>
Написать вам обработчик события на стороне сервера для управления
защищенный аннулируются btnSayHello_Click (объект отправителя, EventArgs е) {Label1.Text = "Hello World ..."; }
Добавить функцию клиента для вызова обработчика события на стороне сервера
функционировать SayHello () {__doPostBack ( "btnSayHello", ""); }
Заменить «btnSayHello» в коде выше, с идентификатором клиента элемента управления.
Поступая таким образом, если элемент управления находится внутри панели обновления, страница будет не обновить. Это так просто.
Еще одна вещь, чтобы сказать, что: Будьте осторожны с идентификатором клиента, потому что это зависит от вас политики ID поколения, определенной с помощью свойства ClientIDMode.
Статическая, сильно типизированных программирования всегда чувствовал себя очень естественно для меня, поэтому я сначала сопротивлялась обучения JavaScript (не говоря уже о HTML и CSS), когда я должен был построить веб-фронт-эндов для моих приложений. Я хотел бы сделать что-нибудь, чтобы работать вокруг этого, как перенаправление на страницу только для выполнения и действия на событие OnLoad, до тех пор, как я мог бы код чистый C #.
Вы найдете , однако , что если вы собираетесь работать с веб - сайтами, вы должны иметь открытый ум и начать думать более веб-ориентированных (то есть, не пытайтесь сделать на стороне клиента , то на сервере , и наоборот) , Я люблю WebForms ASP.NET и до сих пор использую его (так же как MVC ), но я скажу , что, пытаясь сделать вещи проще и скрытие разделения клиента и сервера он может ввести в заблуждение новичков и на самом деле в конечном итоге делает вещи более трудными в разы ,
Мой совет, чтобы узнать некоторые основные JavaScript (как регистрировать события, извлекать объекты DOM, манипулировать CSS и т.д.), и вы найдете веб-программирование гораздо более приятным (не говоря уже легче). Много людей упомянули различные библиотеки Ajax, но я не вижу никаких реальных примеров Ajax, так вот он идет. (Если вы не знакомы с Ajax, все это, делают асинхронный запрос HTTP для обновления содержимого (или, возможно, выполнить серверное действие в вашем сценарии) без перезагрузки всей страницы или делать полный постбэк.
Сторона клиента:
<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. ASP.NET MVC 4 Web API делает создание веб - службы на стороне сервера для обработки запроса на ветер , а также. Но многие люди не знают , что вы также можете добавить контроллеры 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 и мощность С # / ASP.NET, давая людей, посещающих ваш сайт лучше общий опыт. Без ущерба ничего, вы получаете лучшее из обоих миров.
Рекомендации
Попробуй это:
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()
Я думаю, что это один очень легко!
Я пытаюсь осуществить это, но он не работает правильно. Страница размещение назад, но мой код не получает казнен. Когда я отладки страницы, то RaisePostBackEvent никогда не увольняют. Одна вещь, которую я сделал по-другому, я делаю это в пользовательский элемент управления, а не на странице ASPX.
Если кто-то, как Мерк, и возникли проблемы в течение ближайшего этого, у меня есть решение:
Если у вас есть пользовательский элемент управления, то кажется, что вы должны также создать PostBackEventHandler в родительской странице. И тогда вы можете вызвать PostBackEventHandler пользовательского элемента управления путем вызова его непосредственно. Смотри ниже:
public void RaisePostBackEvent(string _arg)
{
UserControlID.RaisePostBackEvent(_arg);
}
Где UserControlID это идентификатор вы дали пользователю контроль на родительской странице, когда вы вложен его в размечать.
Примечание: Вы также можете просто просто вызывать методы, принадлежащие к этому элементу управления пользователем непосредственно (в этом случае, вам нужно будет только обработчик RaisePostBackEvent в родительской страницы):
public void RaisePostBackEvent(string _arg)
{
UserControlID.method1();
UserControlID.method2();
}
Я думаю , что сообщение в блоге Как получать и данные базы данных сервера SQL - шоу в ASP.NET страницы с помощью Ajax (JQuery) поможет вам.
JavaScript код
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<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 Server Side Функция
[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;
}
Что касается:
var button = document.getElementById(/* Button client id */);
button.click();
Это должно быть, как:
var button = document.getElementById('<%=formID.ClientID%>');
Где FormID является контроль ID ASP.NET в файле .aspx.
Пожалуйста, попробуйте следующее:
<%= Page.ClientScript.GetPostBackEventReference(ddlVoucherType, String.Empty) %>;
ddlVoucherType является контроль, который будет вызывать выбранный индекс изменения ... И вы можете поставить любую функцию от выбранного изменения индекса этого элемента управления.
Самый простой и лучший способ для достижения этой цели является использование onmouseup()
событие JavaScript , а неonclick()
Таким образом , вы будете стрелять JavaScript после нажатия кнопки , и это не будет мешать ASP OnClick()
события.
Я стараюсь это и таким образом я мог запустить метод Asp.Net при использовании JQuery.
Сделайте страницу редиректа в коде JQuery
window.location = "Page.aspx?key=1";
Затем с помощью строки запроса в загрузке страницы
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["key"] != null)
{
string key= Request.QueryString["key"];
if (key=="1")
{
// Some code
}
}
}
Так что нет необходимости запускать дополнительный код