#javascript #c# #asp.net #webforms
#javascript #c# #asp.net #веб-формы
Вопрос:
Я хочу получить подробное представление о том, как работают эти вызовы. Я знаю, что мы можем объявить класс сервиса в веб-формах, который является производным от System.Web.Services.Веб-сервис и функции внутри этого класса обслуживания могут быть вызваны из JavaScript после объявления функции с помощью этого [WebMethod(EnableSession = true)].
У меня есть страницы aspx с их внутренними файлами aspx.cs, которые содержат только общедоступные классы. Есть ли какой-либо способ, которым я могу вызывать функции внутри этих файлов aspx.cs и внутри этих общедоступных классов. Обе статические и нестатические функции. Если нет, то в чем причина этого, и если да, то как это работает.
Этот пост предназначен для более глубокого понимания структуры и работы веб-форм.
Ответ №1:
Методы должны быть статическими. Статический метод точно такой же для каждой страницы. Поскольку это веб-страница, к ней могут получить доступ несколько пользователей. Если страница открыта у 4 пользователей на вашем сайте, а метод говорит «Do x», он должен иметь возможность делать одно и то же для всех.
Например, распространенное недоразумение с методами страницы: вы не можете получить доступ к элементам управления на странице из статического веб-метода / метода страницы. Если метод говорит «обновить этот элемент управления», какой элемент управления, на какой странице должен быть обновлен? Пользователь 1, 2, 3 или 4? Это невозможно узнать.
Вы должны вернуть данные / информацию из методов, лежащих в основе кода, в метод javascript, который вызвал метод, затем обновить элементы управления вашей страницы из метода javascript.
Hth.
Комментарии:
1. Я понял эту часть. Тем не менее, мы можем получить доступ к сеансу в коде после вызова, если он не может обновить элемент управления, не зная, является ли это пользователем 1,2,3 или 4, тогда как он узнает, какой это сеанс? Если он знает сеанс, то почему бы не обновить элемент управления. ?
2. Сеанс не является частью страницы, это часть приложения. Смотрите Global.asax. Вы можете получить доступ к if со страницы, но это не страница. Я думаю, я знаю, что вы говорите, но я думаю, что это связано с возможностью доступа к коду из js, который меняет ситуацию.
3. Если вы отправляете страницу обратно, у сервера есть все для работы; если вы получаете доступ к исходному коду, не отправляя страницу обратно, сервер не может ничего предположить о странице, на ней недостаточно информации.
4. Я искал ссылку, которая могла бы помочь, но веб-сайт не функционирует. Не уверен, что смогу полностью, правильно объяснить это в конце концов. Я все же понял ваш вопрос.
Ответ №2:
Невозможно вызвать нестатический метод со стороны клиента, используя javascript / jQuery. Для вызова нестатических методов с использованием javascript у вас есть несколько разных способов, таких как использование веб-службы, службы WCF и т.д.
Я собираюсь объяснить, как вызвать нестатический метод с помощью веб-сервиса с использованием javascript:
Сначала создайте новое веб-приложение, в моем случае имя приложения — «WebApplicationDemo».
Я добавил веб-сервис в этот проект с именем «WebService1.asmx».
Код :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace WebApplicationDemo
{
/// <summary>
/// Summary description for WebService1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld(string strName)
{
return "Hello " strName ", The current time is = " DateTime.Now "";
}
}
}
Создайте свой проект, а затем добавьте новую веб-форму с именем «WebForm1.aspx».
код:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplicationDemo.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
function getTime() {
var name = document.getElementById("txtName").value;
WebApplicationDemo.WebService1.HelloWorld(name, getTimeSuccess, getTimeError);
}
function getTimeSuccess(result) {
alert(result);
}
function getTimeError(error) {
alert(error);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/WebService1.asmx" />
</Services>
</asp:ScriptManager>
<div style="font-family: Arial">
<asp:Label runat="server" Text="Enter Your Name"></asp:Label>
<asp:TextBox runat="server" ID="txtName" Height="20" Width="150"></asp:TextBox>
<input type="button" id="btnGetTime" value="Submit" onclick="getTime()" />
</div>
</form>
</body>
</html>
Теперь запустите проект в веб-браузере, и вы получите текстовое поле и кнопку там, в моем случае у меня есть типы «Purvesh» внутри текстового поля и нажмите отправить. Он вызывает службу, которая содержит мои нестатические методы, и возвращает результат.
Вывод
Привет, поставщик, текущее время = 18-15 сентября, 4:04:10 вечера