问题
Hi I am calling a simple page method from javascript , here is my code at markup
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" />
at cs
[System.Web.Services.WebMethod]
public static string TestMethod(string para)
{
return "Yes this is working";
}
the alert show the result and it says "null". I check firebug and i don't see error from console.
If i change the TestMethod to
[System.Web.Services.WebMethod]
public static string TestMethod()
{
return "Yes this is working";
}
And PageMethod to
PageMethods.TestMethod( function (response) { alert(response); } );
It shows the correct response as "Yes this is working". However, i need to pass parameter to the function. Do i miss anything?
Thanks for help.
回答1:
I think you have to use [ScriptMethod] instead of or in addition to [WebMethod] in order to have asmx methods available via javascript calls. The reason why it might work without taking a parameter is because the request doesn't have to parse anything in order to process the method.
Try it with [ScriptMethod] (and possibly [ScriptService] on your class definition) and see if that makes a difference.
回答2:
I think the main problem is with the assembly you are using for ScriptManager.
<asp:ScriptManager ID="ScriptManager1"
EnablePageMethods="true"
runat="server" />
To resolve your problem use in 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>
and in your .aspx page use following lines -
<ajax:ScriptManager ID="ScriptManager1"
EnablePageMethods="true"
runat="server" />
Hope this will help you to resolve your problem.
回答3:
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.
回答4:
from what i remember, you just need 3 params in your call(your param, onsuccess and onfailure). did you try using PageMethods.TestMethod("test parameter", OnCallSumComplete, OnCallSumError);
来源:https://stackoverflow.com/questions/10658061/calling-asp-net-page-method-from-javascript-not-working