использование веб-методов с эталонными страницами

У меня есть функция на всех страницах моего сайта, которая находится на моей главной странице, и я хочу, чтобы она запускалась из некоторого метода jQuery Ajax.

У меня есть такой код на данный момент

jQuery

$(document).ready(function() {
  $("#test").click(function() {
    $.ajax({
      type: "POST",
      url: "Default.aspx/GetDate",
      data: "{}",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function(msg) {
        $("#test").text(msg.d);
      }
    });
  });
});

HTML на главной странице

<div id="test">Click here for the time.</div>

Код Asp.Net в моем Master VB

<WebMethod> _
Public Shared Function GetDate() As String
    Return DateTime.Now.ToString()
End Function

В настоящее время это не работает, если я не перенесу веб-метод на страницу Default.aspx VB.

Есть ли способ изменить эту часть

url: "Default.aspx/GetDate",

Чтобы использовать функцию мастер-страницы?

Я попытался изменить его на

url: "template.master/GetDate",

Но это просто дает мне ошибку 404

Есть идеи?

заранее спасибо


person Jamie Taylor    schedule 20.12.2011    source источник


Ответы (3)


Код вашего веб-метода не может находиться в коде программной части вашей главной страницы.

Я обнаружил, что проще включить в свой проект реальную веб-службу или службу WCF для вещей, которые мне нужно будет вызывать с нескольких страниц.

РЕДАКТИРОВАТЬ :

Чтобы добавить службу WCF в ваш проект:

  1. щелкните правой кнопкой мыши проект
  2. выберите [Служба WCF] и дайте ей имя (например, Agent.svc)
  3. настроить службу (см. http://www.codeproject.com/KB/aspnet/jQuery_To_WCF.aspx)

Несколько примеров здесь, в Stackoverflow...

Надеюсь, это поможет.

person ShaneBlake    schedule 20.12.2011
comment
Я не совсем уверен, как добавить службу WCF в мой проект? - person Jamie Taylor; 20.12.2011

Как насчет того, чтобы поместить веб-метод в базовый класс?

public class WebMethodBase : Page
{
    <WebMethod> _
    Public Shared Function GetDate() As String
        Return DateTime.Now.ToString()
    End Function
}

Затем наследуйте этот класс от тех страниц, для которых вы хотите использовать веб-метод.

Простите меня за смешанный C # и VB, я не знаком с синтаксисом VB.

person Andreas    schedule 20.12.2011
comment
Если я добавлю базовый класс, как мне использовать функцию внутри него из AJAX? - person Jamie Taylor; 20.12.2011

Вы можете пойти по маршруту метода базового класса, как упоминал Андреас выше.

Убедись:

  • Веб-метод является статическим.
  • В вызове Ajax динамически изменяйте URL-адрес в зависимости от просматриваемой страницы. Что-то вроде этого:

(в вызове Ajax:)

url: window.location.pathname.substr(1) + "/GetDate"
person ryancdotnet    schedule 30.03.2015
comment
В целом это хорошая методика. Однако для сайтов, где главная страница просто http://example.com/, URL-адрес будет null. Или любые другие вложенные пути, которые явно не включают документ по умолчанию. - person Andrew S; 08.11.2017