Вызовите нестатический метод на стороне сервера с клиентской стороны с помощью JavsScript
Как вызвать нестатический метод на стороне сервера (aspx.cs) с клиентской стороны с помощью javascript (aspx)....?
Насколько я знаю, я могу вызвать статический метод на стороне сервера с клиентской стороны...
сторона сервера:
[WebMethod]
public static void method1()
{
}
клиентская сторона:
<script language="JavaScript">
function keyUP()
{
PageMethods.method1();
}
</script>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
Это работает. Теперь как я могу назвать нестатический метод с клиентской стороны?
Ответы
Ответ 1
Вы можете избежать статического ограничения, используя простую страницу .asmx вместо страницы codebehind.
1) Откройте новый веб-сайт, используя шаблон AJAX Enable ASP.NET(он помещает необходимые ссылки в web.config)
2) SIMPLESERVICE.ASMX - добавьте новый веб-сервис .asmx(я назвал my SimpleService.asmx)
Обратите внимание на оформление [System.Web.Script.Services.ScriptSerive] и что класс SimpleService реализует Webservice.
<%@ WebService Language="C#" Class="SimpleService" %>
using System;
using System.Web.Services;
[System.Web.Script.Services.ScriptService]
public class SimpleService : WebService
{
[WebMethod]
public string GetMessage(string name)
{
return "Hello <strong>" + name + "</strong>, the time here is: " + DateTime.Now.ToShortTimeString();
}
}
3) DEFAULT.ASPX - Чтобы использовать его, обратитесь к сервису в вашем менеджере script, и вы выключены и запущены. В моем Javascript я вызываю class.method - SimpleService.GetMessage.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
<script language="javascript" type="text/javascript">
function callServer() {
SimpleService.GetMessage($get("Name").value, displayMessageCallback);
}
function displayMessageCallback(result) {
$get("message").innerHTML = result;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" >
<Services>
<asp:ServiceReference Path="~/SimpleService.asmx" />
</Services>
</asp:ScriptManager>
<div>
</div>
<h1>Hello World Example</h1>
<div>
Enter Name: <input id="Name" type="text" />
<a href="javascript:callServer()">Call Server</a>
<div id="message"></div>
</div>
</form>
</body>
</html>
Я использовал пример, который я нашел у Скотта Гу
Найдено здесь.
Ответ 2
Нет, вы не можете вызывать нестатические методы с самой стороны клиента. Я пробовал один раз, но он уродливый (также я использовал jQuery ajax). Просто вызовите страницу с помощью ajax с именем метода, добавленным к нему в качестве параметра строки запроса, а затем на стороне сервера проверьте параметр и вызовите соответствующий метод. Но, как я уже сказал, это довольно уродливо: (
$.ajax({'/mypage.aspx?m=mymethod',......}); //this is not correct syntax
на стороне сервера:
protected void Page_Load(object sender, EventArgs e)
{
if(!Request.QueryString.HasKeys() ||
string.IsNullOrEmpty(Request.QueryString["m"]))
{
//return error or something relevant to your code
}
var m = Request.QueryString["m"];
switch(m)
{
case "a":
a();
break;
.....
.....
}
}
Ответ 3
На самом деле, вы не можете вызвать нестатические методы таким образом.
Когда вы вызываете PageMethod, вы в основном вызываете специальный веб-сервис. Эта функция работает только со статическими методами на одной странице.
Ответ 4
С#
public string LoadString() {
return "my string";
}
JS/JQuery
$('#txt').val(<%= LoadString() %>);
Ответ 5
как ответ Прамулии
я думаю, что вы хотите иметь функцию с аргументом с клиентской стороны, которая реализована в примере → CallServer (arg1, arg2)
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html >
<head runat="server">
<title>Client Callbacks</title>
<script runat="server">
public void RaiseCallbackEvent(String eventArgument)
{
// Processes a callback event on the server using the event
// argument from the client.
}
public string GetCallbackResult()
{
// Returns the results of a callback event to the client.
string dateString = DateTime.Now.ToLongDateString();
return dateString;
}
void Page_Load(object sender, EventArgs e)
{
ClientScriptManager cm = Page.ClientScript;
String cbReference = cm.GetCallbackEventReference(this, "arg",
"ReceiveServerData", "");
String callbackScript = "function CallServer(arg, context) {" +
cbReference + "; }";
cm.RegisterClientScriptBlock(this.GetType(),
"CallServer", callbackScript, true);
}
</script>
<script type="text/javascript">
function ReceiveServerData(arg, context) {
Message.innerText = "Date from server: " + arg;
}
</script>
</head>
<body>
<h2>Client Callbacks Without Postbacks</h2>
<form id="form1" runat="server">
<input type="button" value="Callback"
onclick="CallServer('1', alert('Callback sent to Server'))" />
<br />
<span id="Message"></span>
</form>
</body>
</html>
Ответ 6
Одна из лучших ссылок:
https://msdn.microsoft.com/en-us/library/aa479042.aspx
Объяснение очень хорошее. Внимательно следуйте инструкциям и не забудьте внести изменения в Web.config. Используйте конфигурацию, указанную в ссылке кода кода введите здесь описание изображения
Ответ 7
Если вы хотите вызвать его с использованием той же функции, вы можете использовать следующий код:
[WebMethod]
public static void method1()
{
ClassOfNonStaticFunction obj = new ClassOfNonStaticFunction();
obj.yourFunctionName(ParametersIfAny);
}
Ответ 8
Dave подробно написал о вызовах методов страниц с клиентской стороны, используя jquery ajax. Общая идея такова (если вы обнаружите какую-либо проблему, обратитесь к сайту Dave).
Код С#:
[WebMethod]
public static string yourmethod(/*params*/)
{
return "Hello World!"
}
ASPX:
$.ajax({
type: 'POST',
data: /*Your Data*/,
dataType: 'JSON',
contentType: 'application/json',
url: '/yourpage.aspx/yourmethod',//Method to call
success: function(result, status) {
//handle return data
},
error: function(xhr, status, error) {
//handle error
}
});