javascript PAGEMETHODS 不适用于 JS 函数

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21219302/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-27 20:24:49  来源:igfitidea点击:

PAGEMETHODS is not working from JS function

c#javascriptajaxcode-behindpagemethods

提问by user3212507

I am trying to call code behind method from JS function using pagemethods but its not calling and its not throwing any error either...

我正在尝试使用 pagemethods 从 JS 函数调用方法背后的代码,但它没有调用,也没有抛出任何错误......

function example(){

pagemethods.method();
}

**aspx.cs
[webmethod]
public static void method(){

//some logic
}

so to find the issue i did some negative testing for that

所以为了找到这个问题,我做了一些负面测试

  1. I commented WEBMETHOD then it showed an error by saying"object does not support this property or method".can i assume this case shows pagemethods is working!!!

  2. Then I replaced calling method name in JS function to pagemethods.newmethod() but i didn't change method name to newmethod..i was expecting an some error but it didn't give me an error..

  1. 我评论了 WEBMETHOD 然后它通过说“对象不支持此属性或方法”显示错误。我可以假设这种情况表明 pagemethods 正在工作!!!

  2. 然后我将 JS 函数中的调用方法名称替换为 pagemethods.newmethod() 但我没有将方法名称更改为 newmethod ..我期待一些错误,但它没有给我一个错误..

NOTE:i have "method=post" in form declaration..does it effect pagemethods anything..

注意:我在表单声明中有“method=post”..它会影响 pagemethods 吗..

so confused why this issue is happening!!!

很困惑为什么会发生这个问题!!!

can we call codebehind method in any other way instead of pagemethods..please advice!!!

我们可以以任何其他方式调用代码隐藏方法而不是 pagemethods..请建议!!!

回答by Grundy

in msndyou can see a sample of this, so you need...

msnd 中,您可以看到这样的示例,因此您需要...

in markup:

在标记中:

<asp:ScriptManager ID="sm" runat="server" EnablePageMethods="true">
    <Scripts >
        <asp:ScriptReference Path="pm.js" />
    </Scripts>
</asp:ScriptManager>

in code behind: your static method, with attribute [WebMethod]

在后面的代码中:您的静态方法,带有属性 [WebMethod]

in pm.js: something like this

pm.js:这样的事情

function example(){
    PageMethods.method();
}

UPDATE
Another variant is use an ajax request to your method, for example with jquery in goes like this:

更新
另一个变体是对您的方法使用 ajax 请求,例如使用 jquery 是这样的:

function CallMethod(){
    $.ajax({
        type: "POST",
        dataType: 'json',
        contentType: "application/json; charset=utf-8",
        url: "YourPage.aspx/yourmathod",
        data:JSON.stringify({}), // parameters for method
        success: function (dt) { alert(dt);}, //all Ok
        error: function () { alert('error'); } // some error
    });
}

回答by Bhushan Mahajan

Below given code worked for me.

下面给定的代码对我有用。

.cs -

。CS -

using Microsoft.AspNet.FriendlyUrls;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    [System.Web.Services.WebMethod(EnableSession = true)] 
    [System.Web.Script.Services.ScriptMethod(UseHttpGet = false, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
    public static string yourmethod1()
    {
         return "Allow user";
    }
}

apsx.cs Page -

apsx.cs 页面 -

<%@ Page Language="C#" AutoEventWireup="false" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">


<head runat="server">

    <title></title>

     <script type="text/javascript">

        function GreetingsFromServer()
        {
            PageMethods.yourmethod1(OnSuccess, OnError)
        }
        function OnSuccess(response)
        {
            alert(response);
        }
        function OnError(error) 
        {
            alert(error);
        }
    </script>

</head>


<body>

    <form id="form1" runat="server"  method="post" >

    <div>
            <asp:ScriptManager runat="server" EnablePageMethods="true"  EnablePartialRendering="true"  > </asp:ScriptManager>

            <input id="Button1" type="button" value="button" onclick=" return GreetingsFromServer();" />

    </div>

    </form>
</body>
</html>

Web.conf -

Web.conf -

<configuration>

  <appSettings>
           <add key="owin:AutomaticAppStartup" value="false" />
  </appSettings>

    <system.web>

            <compilation debug="true" targetFramework="4.5.2" />

            <httpRuntime targetFramework="4.5.2" />

            <authorization>
                       <allow users="*"/>
            </authorization>

    </system.web>

</configuration>

回答by Bhushan Mahajan

This approach is also working -

这种方法也有效——

.aspx file -

.aspx 文件 -

<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Linq" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.Web.UI.WebControls" %>
<%@ Import Namespace="Microsoft.AspNet.FriendlyUrls" %>
<%@ Import Namespace="Newtonsoft.Json" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">


<head runat="server">
    <title></title>
    <script type="text/javascript" src="jquery-1.10.2.min.js"></script>

    <script type="text/javascript">

        function CallMethod()
        {
            debugger;


                jQuery.ajax({

                    url: 'Default.aspx/yourmethod',
                    type: "GET",
                    contentType: "application/json; charset=utf-8",
                    dataType: 'json',
                    data: JSON.stringify({}), // parameters for method
                    success: function (dt)
                    {
                        debugger;
                        alert('success : ' + dt.d  );

                    }, //all Ok
                    error: function (dt) {
                        debugger;
                        alert('error : ' + dt);
                    } // some error

                });


        }

        function GreetingsFromServer()
        {
            PageMethods.yourmethod1(OnSuccess, OnError);
        }
        function OnSuccess(response)
        {
            debugger;
            alert(response);
        }
        function OnError(error) {
            alert(error);
        }


    </script>


<script language="C#" runat="server">

    [System.Web.Services.WebMethod(EnableSession = true)]  
    [System.Web.Script.Services.ScriptMethod(UseHttpGet = true, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
    public static string yourmethod()
    {
        var settings = new Microsoft.AspNet.FriendlyUrls.FriendlyUrlSettings();
        settings.AutoRedirectMode = Microsoft.AspNet.FriendlyUrls.RedirectMode.Off;
        string json = Newtonsoft.Json.JsonConvert.SerializeObject("Allow user");
        return json;
    }


     [System.Web.Services.WebMethod(EnableSession = true)]  
    [System.Web.Script.Services.ScriptMethod(UseHttpGet = true, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
      public static string yourmethod1()
    {
        //string json = Newtonsoft.Json.JsonConvert.SerializeObject("Allow user");
        // or
        return "Allow user";
    }


    </script>
</head>
<body>
    <form id="form1" runat="server" >
        <div>

            <asp:ScriptManager runat="server" EnablePageMethods="true"  EnablePartialRendering="true"  > </asp:ScriptManager>
            <input id="Button1" type="button" value="button" onclick="return GreetingsFromServer();" />
             <input id="Button2" type="button" value="button" onclick="return CallMethod();" />
        </div>
    </form>
</body>
</html>

Web.conf -

Web.conf -

<configuration>

  <appSettings>
           <add key="owin:AutomaticAppStartup" value="false" />
  </appSettings>

    <system.web>

            <compilation debug="true" targetFramework="4.5.2" />

            <httpRuntime targetFramework="4.5.2" />

            <authorization>
              <allow users="*"/>
            </authorization>

    </system.web>

</configuration>

回答by Dinesh Thammineni

Perhaps you might be missing EnablePageMethods = true in your aspx page...

也许您的 aspx 页面中可能缺少 EnablePageMethods = true ...