如何从JS调用服务器端方法

时间:2015-04-23 22:31:47

标签: javascript c# jquery asp.net-ajax

我读过许多问题,论坛,博客,尝试过很多东西,而我似乎无法使其发挥作用。

我已尝试使用PageMethods.MyMethod(),但这不起作用。确保我的ScriptManagerEnablePageMethods ="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的断点。这对我来说是新的,所以任何解释都会非常有用。

2 个答案:

答案 0 :(得分:0)

检查服务器的错误:

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()
{
    ....
}

答案 1 :(得分:0)

我设法在朋友的帮助下弄清楚了,我会发布我的答案,但我相信这很长很复杂。我理解他所做的大部分事情,但我仍然不相信它是如何运作的。这几乎和我做的几乎一样,但是他把JS放在一个单独的文件中并将该文件设置为基础JS。在那里调用了Web服务,从我的JS中调用了调用Web服务的函数。它起作用了lol