繁体   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