使用带有母版页的Web方法

时间:2011-12-20 15:11:41

标签: jquery asp.net ajax webmethod

我的网站中的所有页面都有一个函数,它位于我的母版页中,我希望它可以从一些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>

我的Master VB背后的Asp.Net代码

<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 个答案:

答案 0 :(得分:9)

您的网络代码不能驻留在母版的代码隐藏中。

我发现在我的项目中包含实际的Web服务或WCF服务更容易,我需要从多个页面调用它。

编辑:

向项目添加WCF服务:

  1. 右键单击项目
  2. 选择[WCF服务]并为其命名(即Agent.svc)
  3. 设置服务(请参阅http://www.codeproject.com/KB/aspnet/jQuery_To_WCF.aspx
  4. Stackoverflow上有几个例子......

    希望有所帮助。

答案 1 :(得分:3)

如何将webmethod放在基类中?

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

然后从那些要公开webmethod的页面继承这个类。

请原谅我的混合C#和VB,我不熟悉VB语法。

答案 2 :(得分:1)

你可以像上面提到的Andreas那样去基类方法路线。

确保:

  • 网络方法是静态的。
  • 在您的Ajax调用中,根据您正在查看的页面动态更改URL。这样的事情:

(在Ajax调用中:)

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