9

嗨,我正在从 javascript 调用一个简单的页面方法,这是我在标记处的代码

 function OnCallSumComplete(result, userContext, methodName) {             
            alert(result);
 }
 function OnCallSumError(error, userContext, methodName) {
     if (error !== null) {
         alert(error.get_message());
     }
 }
 function test(){
     var contextArray = "";
     PageMethods.TestMethod("test parameter", OnCallSumComplete, OnCallSumError,  contextArray);
 }

 <asp:ScriptManager ID="ScriptManager1" EnablePageMethods="true" runat="server" />

在 cs

 [System.Web.Services.WebMethod]
 public static string TestMethod(string para)
 {

    return "Yes this is working";
 }

警报显示结果并显示“null”。我检查了萤火虫,但没有从控制台看到错误。

如果我将 TestMethod 更改为

 [System.Web.Services.WebMethod]
 public static string TestMethod()
 {
    return "Yes this is working";
 }

和 PageMethod 来

 PageMethods.TestMethod( function (response) { alert(response);  } );

它显示正确的响应为“是的,这是有效的”。但是,我需要将参数传递给函数。我想念什么吗?

感谢帮助。

4

4 回答 4

3

我认为主要问题在于您用于 ScriptManager 的程序集。

<asp:ScriptManager ID="ScriptManager1" 
                   EnablePageMethods="true" 
                   runat="server" />

要解决您在 Webconfig 中使用的问题 -

<pages>
  <controls>
    <add tagPrefix="ajax" 
         namespace="System.Web.UI" 
         assembly="System.Web.Extensions, 
                   Version=1.0.61025.0, 
                   Culture=neutral, 
                   PublicKeyToken=31bf3856ad364e35"/>
  </controls>
</pages>

并在您的 .aspx 页面中使用以下几行 -

<ajax:ScriptManager ID="ScriptManager1" 
                    EnablePageMethods="true" 
                    runat="server" />

希望这将帮助您解决您的问题。

于 2012-09-16T17:44:33.893 回答
2

我认为您必须使用 [ScriptMethod] 代替 [WebMethod] 或除 [WebMethod] 之外,以便通过 javascript 调用使用 asmx 方法。它可能在不带参数的情况下工作的原因是因为请求不必解析任何内容来处理该方法。

尝试使用 [ScriptMethod] (可能在您的类定义中使用 [ScriptService]),看看是否会有所不同。

于 2012-05-18T19:05:53.917 回答
1

The problem is that on your Web.config you need to have a module (IHttpModule) enabled: ScriptModule-4.0. This is enabled by default, but you may have removed it. Look for it in the machine-wide Web.config file, if you are curious, and see if it was removed from your local Web.config. Its declaration should be under system.webServer/modules (for IIS >= 7) and system.web/httpModules for Visual Studio's built-in web server or IIS < 7.

于 2014-03-26T18:06:25.030 回答
0

据我所知,您的通话中只需要 3 个参数(您的参数,onsuccess 和 onfailure)。您是否尝试使用 PageMethods.TestMethod("test parameter", OnCallSumComplete, OnCallSumError);

于 2012-05-18T18:54:23.103 回答