Один из способов вызова метода C # из клиента с использованием JavaScript - это использование webmethods .
. Вам необходимо определить публичный статический метод в вашем коде и добавитьк нему атрибут [ WebMethod ].
В этом примере я использовал WebMethod, который возвращает текущую дату и время в виде строки с сервера:
[WebForm1.aspx.cs]
using System;
using System.Web.Services;
namespace TemplateWebMethod
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static string MyMethod()
{
return DateTime.Now.ToString();
}
}
}
В форме страницы aspx необходимо добавить asp: ScriptManager с EnablePageMethods = "true" :
[WebForm1.aspx]
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="TemplateWebMethod.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
// during onload we set the onclick method of our button
// to call MyMethod from the server
window.onload = function(){
document.getElementById('Button1').onclick = function() {
PageMethods.MyMethod(myMethodCallBackSuccess, myMethodCallBackFailed);
}
}
function myMethodCallBackSuccess(response) {
// JavaScript code that will run
// after MyMethod was run successfully on server
// respose is the returned value of MyMethod
alert(response);
}
function myMethodCallBackFailed(error) {
alert(error.get_message());
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager runat="server" EnablePageMethods="true" />
<asp:Button runat="server" ID="Button1" ClientIDMode="Static" Text="Call MyMethod" UseSubmitBehavior="false" />
</form>
</body>
</html>
Для Button1:
ClientIDMode = "Static" используется, поэтому у Button1 будет одинаковый идентификатор на стороне клиента, и мы сможем найтиэто легко при добавлении на стороне клиента onclick.
UseSubmitBehavior = "false" требуется, чтобы нажатие кнопки не вызывало полную обратную передачу.
В этом примереWebMethod MyMethod будет вызываться из codebehind нажатием кнопки Button1, поэтому мы устанавливаем поведение onclick для Button1 on window.onload:
window.onload = function(){
document.getElementById('Button1').onclick = function() {
PageMethods.MyMethod(myMethodCallBackSuccess, myMethodCallBackFailed);
}
}
Где:
PageMethods.MyMethod(myMethodCallBackSuccess, myMethodCallBackFailed);
- это метод JavaScript, который вызывает код на стороне сервера.
Нам нужно определить его 2 метода обратного вызовадля успеха и неудачи.
В случае успеха мы выскакиваем сообщение с возвращенным значением из MyMethod:
function myMethodCallBackSuccess(response) {
alert(response);
}
При ошибке мы выскакиваем сообщение с сообщением об ошибке:
function myMethodCallBackFailed(error) {
alert(error.get_message());
}