簡體   English   中英

ASP.NET Web Forms - 將 Z3EB7106C3477A60E6BBF5DBFDE1DA59 方法名從 Page 發送到其他。

[英]ASP.NET Web Forms - Send Ajax from Page.aspx to other Different.cs/MethodName

如何調用位於與調用 ajax function 的頁面不同的頁面內的(靜態 [WebMethod])方法()? 該頁面還使用母版頁設置。

  • 想調用: root/Controllers/MyController.cs/method()
  • 來自: root/Pages/MyPage.aspx
  • 主: root/Pages/Master/MasterIndex.master

MyController 繼承: Page (但沒有 forward.aspx 視圖)並具有此方法:

[WebMethod]
public static void HelloWorld(string txt) // , string[] parameters
{
   System.Diagnostics.Debug.WriteLine("HelloWorld: " + txt);
}

我一直在 MyPage.aspx 上嘗試這個:

 $.ajax({
       url: "Controllers/MyController/HelloWorld",
       type: "POST",
       error: function () {
         alert('error');  <-- only enters here
       },
       success: function () {
         alert('success');
       }
...

但是無論我如何使用../../、~/、.cs 調整路徑,我似乎都無法到達它。

這是一個 web forms 項目,但我想要一個集中的 controller - 我無法將項目轉換為 MVC。

好的,所以我們不關心控制器等等。 我們使用 web forms,我們想在另一個頁面中調用 + 使用 web 方法。 當然,事實上我傾向於將所需的 web 方法放在同一頁面中 - 因此多年來沒有使用“asmx”頁面。

您當然可以自由地使用或調用網站任何頁面中的網絡方法。

因此,問題實際上歸結為獲取正確的路徑名。 但是,如果我們從該頁面向下(或向上)幾個文件夾會發生什么? 我有點不想擔心,更糟糕的是,獲得 URL 路徑可能會很痛苦。 所以,這里的真正目標是消除那個痛點,而不必擔心 URL!

所以,我建議這個代碼:

    <div>

        <asp:TextBox ID="TextBox1" runat="server" ClientIDMode="Static"></asp:TextBox>
        <br />
        <asp:Button ID="Button1" runat="server"
            Text="Web method call (ajax)" CssClass="btn"
            OnClientClick="MyTestWeb();return false"/>

    </div>

    <script>

        function MyTestWeb() {
            tBox = $('#TextBox1')
            URL = '<%: ResolveClientUrl("~/Grids/Test1.aspx/HelloWorld") %>' 

            alert(URL)   // testing - remove when happy

            $.ajax({
                type: "POST",
                url: URL,
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data: "{}",
                success: function (data) {
                    // ok, have return value, place in 
                    // TextBox1
                    tBox.val(data.d)
                }
            });
        }

所以,我們得到了正確的工作 URL 上面。 在 asp.net 代碼中,您可以使用“~/”從根目錄解析路徑名,但這樣的表達式在 JavaScript 中不起作用。 (也不是在客戶端控件中)。

所以,我使用上面的服務器端表達式——它每次都會給我正確的 url。

對於此測試,我的頁面位於名為 Test4 的文件夾中。

但是,web 方法頁面位於名為 Grids 的文件夾中。

所以,返回的 URL 實際上變成了這樣:

在此處輸入圖像描述

請注意我們如何用“..”將軟木塞降低一層。 但是,真的誰在乎正確的 URL 應該是什么,我只關心我得到一個,我可以輸入一個我知道會起作用的 EASY url。

所以,我建議你試試上面的 - 並顯示正確的 URL,然后你可以輸入,或者繼續使用上面的想法。

另一個頁面中的 web 方法是這樣的:

<WebMethod()>
Public Shared Function HelloWorld() As String

    Dim str As String = "Hello world"

    Return str

End Function

所以,當我運行上面的,我得到/看到這個:

在此處輸入圖像描述

因此,至少,嘗試使用該服務器端表達式來解析 URL,彈出一個警告框,看看它吐出什么。 (但是,真的,你不必關心它吐出什么——只要它有效——對吧?)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM