использование веб-методов с мастер-страницами - PullRequest
7 голосов
/ 20 декабря 2011

У меня есть функция на всех страницах моего сайта, которая находится на моей главной странице, и я хочу, чтобы она запускалась из некоторого метода 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

Есть идеи?

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

Ответы [ 3 ]

9 голосов
/ 20 декабря 2011

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

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

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

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

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

Более нескольких примеров здесь о Stackoverflow ...

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

3 голосов
/ 20 декабря 2011

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

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

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

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

1 голос
/ 31 марта 2015

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

Убедитесь, что:

  • Веб-метод статичен.
  • В вашем вызове Ajax, динамически меняйте URL на основе просматриваемой страницы.Примерно так:

(в вызове Ajax:)

url: window.location.pathname.substr(1) + "/GetDate"
...