簡體   English   中英

如何從JS調用服務器端方法

[英]How to call a server side method from JS

我已經閱讀了很多問題,論壇,博客,嘗試了很多東西,我似乎無法使其發揮作用。

我嘗試過使用PageMethods.MyMethod() ,但是沒有用。 確保我的ScriptManager具有EnablePageMethods ="true" ,但仍然沒有。 我在服務器端有一個斷點,它永遠不會命中。 嘗試使用ajax仍然沒有

我是第一個嘗試了解如何使其工作,然后在我的程序上實現。

這是我到目前為止所嘗試的:

服務器端:

[System.Web.Services.WebMethod]
    public static void SomeMethod(string subject, string body, string recipients, string CurrentUserId)
    {
        MessageBox.Show("In c#");
    }

JS:

function SomeFuntion()
{
        debugger; alert("Before web service");

        //PageMethods.CreateDraft(var1, var2, var3, var4);

        $.ajax
            (
                {
                    type: "POST",
                    url: "NewMessage.aspx/SomeMethod",
                    data: "{subject:'" + var1+ "', body:'" + var2+ "', recipients:'" + var3
                        + "', CurrentUserId:'" + var4+ "'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success:
                        function()
                        {
                            alert("In ajax");
                        }
                }
            );
}

正如您所看到的,我嘗試了PageMethods並且它無法正常工作。 我知道函數運行導致我看到警報消息。 順便說一句,當在按鈕上觸發onclick事件時,將調用該函數。 我沒有得到任何錯誤,也沒有達到MessageBox的斷點。 這對我來說是新的,所以任何解釋都會非常有用。

檢查服務器的錯誤:

function SomeFuntion()
{

    $.ajax({
            type: "POST",
            url: "NewMessage.aspx/CreateDraft",
            data: "{subject:'" + var1+ "', body:'" + var2+ "', recipients:'" + var3+ "', CurrentUserId:'" + var4+ "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            beforeSend:function () 
            {
                 alert("about to send request");
            },
            success: function()
            {
                        alert("In ajax");
            },
            error: function(xhr, status, error) 
            {
                   var err = eval("(" + xhr.responseText + ")");
                   alert(err.Message);
            }
        );
}

更多新增內容因為您告訴我您正在獲取“用於訪問路徑的HTTP動詞POST'...'是不允許的”您可能需要配置為http POST請求啟用.NET Web服務。

幾年前我已經刪除了.NET,因此我沒有直接經驗,但是從其他站點中可以找到的內容中,您可能需要在服務器級別進行配置,例如:

<system.web>
   <webServices>
     <protocols>
       <add name="HttpPost"/>
     </protocols>
   </webServices>
 </system.web>

或者你方法之上的指令

[ScriptMethod(UseHttpPost = true)]
public string SomeMethod()
{
    ....
}

我設法在朋友的幫助下弄清楚了,我會發布我的答案,但我相信這很長很復雜。 我理解他所做的大部分事情,但我仍然不相信它是如何運作的。 這幾乎和我做的幾乎一樣,但是他把JS放在一個單獨的文件中並將該文件設置為基礎JS。 在那里調用了Web服務,從我的JS中調用了調用Web服務的函數。 它工作大聲笑

暫無
暫無

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

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