【问题标题】:using web methods with master pages使用带有母版页的 Web 方法
【发布时间】:2012-01-24 12:57:37
【问题描述】:

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

目前这不起作用,除非我将 web 方法移动到 Default.aspx VB 页面

有什么办法可以改变这部分

url: "Default.aspx/GetDate",

要使用母版页功能?

我试着改成

url: "template.master/GetDate",

但这只会给我一个 404 错误

有什么想法吗?

提前致谢

【问题讨论】:

    标签: jquery asp.net ajax webmethod


    【解决方案1】:

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

    我发现在我的项目中包含一个实际的 Web 服务或 WCF 服务来处理我需要从多个页面调用的东西更容易。

    编辑:

    将 WCF 服务添加到您的项目:

    1. 右键单击项目
    2. 选择 [WCF 服务] 并为其命名(即 Agent.svc)
    3. 设置服务(见http://www.codeproject.com/KB/aspnet/jQuery_To_WCF.aspx

    Stackoverflow 上的示例不止这些……

    希望对您有所帮助。

    【讨论】:

    • 我不完全确定如何在我的项目中添加 WCF 服务?
    【解决方案2】:

    将 web 方法放在基类中怎么样?

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

    然后从那些你想暴露webmethod的页面继承这个类。

    C# 和 VB 混用,我不熟悉 VB 语法。

    【讨论】:

    • 如果我添加一个基类,我该如何使用 AJAX 中的函数?
    【解决方案3】:

    你可以走基类方法路线,就像上面提到的安德烈亚斯。

    确保:

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

    (在 Ajax 调用中:)

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

    【讨论】:

    • 这通常是一个很好的方法。但是,对于主页只是 http://example.com/ 的网站,URL 将是 null。或任何其他不明确包含默认文档的子路径。
    猜你喜欢
    • 1970-01-01
    • 2016-03-07
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多