2011-12-20 74 views
7

我已經在我的網站上的所有網頁上的功能位於我的母版頁,我希望它從一些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> 
在我的主人VB

Asp.Net代碼背後

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

Curre ntly這不工作,除非我移動Web方法的Default.aspx VB頁

有沒有辦法我可以改變這部分

url: "Default.aspx/GetDate", 

要使用母版頁的功能?

我試圖將其更改爲

url: "template.master/GetDate", 

但這只是給了我一個404錯誤

任何想法?

在此先感謝

回答

9

你的WebMethod代碼不能駐留在代碼隱藏你的母版頁。

我發現在我的項目中包含一個實際的Web服務或WCF服務會更容易,我需要從多個頁面調用這些服務。

編輯:

要添加一個WCF服務到您的項目:(即Agent.svc)

  1. 右鍵單擊該項目
  2. 選擇[WCF服務],並給它一個名字
  3. 設置服務(見http://www.codeproject.com/KB/aspnet/jQuery_To_WCF.aspx

超過這裏的幾個例子在Stackover流...

希望有所幫助。

+1

+1只需要加一個支持AJAX的WCF服務這個 – Erix 2011-12-20 15:23:39

+0

我不完全知道如何去有關添加WCF服務我項目? – 2011-12-20 16:41:20

+0

@Jamie Taylor:看到我剛剛添加的更新... – ShaneBlake 2011-12-20 19:52:18

3

把webmethod放到基類中怎麼樣?

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

然後從您想要公開webmethod的頁面繼承此類。

原諒我混合C#和VB,我不熟悉VB語法。

+2

如果我添加一個基類,那麼如何使用AJAX中的函數? – 2011-12-20 16:41:41

1

您可以像上面提到的Andreas一樣去基類方法路線。

確保:

  • 將WebMethod是靜態的。
  • 在您的Ajax調用中,根據您正在查看的頁面動態更改URL。事情是這樣的:

(在AJAX調用:)

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

這通常是一種很好的方法。但是,對於主頁只是'http:// example.com /'的網站,網址將爲'null'。或者沒有明確包含默認文檔的任何其他子路徑。 – 2017-11-08 18:20:33