【问题标题】:Why ajax call not calling the static web method?为什么ajax调用不调用静态web方法?
【发布时间】:2015-01-20 08:01:25
【问题描述】:

我正在调用一个静态 Web 方法,该方法写在一个有两个公共类的 aspx.cs 文件中:

public class Employee
{
    public string EmployeeNumber;
    public string FullName;
    public string LoginName;
    public string EmailID;
    public string Phone;
}

public partial class CustomWebMethods : LayoutsPageBase
{
    [WebMethod]
    public static List<Employee> GetEmployeeDetails(string employeeLoginName)
    {
        List<Employee> lstEmployeeDetail = new List<Employee>();
        //do something
        return lstEmployeeDetail;
    }
}

如果我将公共类员工保持在同一页面中,则 ajax 调用工作正常。

但是,如果我将员工移动到另一个类库项目并添加该项目的引用,则 ajax 调用不起作用。为什么?

Javascript 方法根本无法调用 web 方法。

【问题讨论】:

    标签: javascript c# jquery ajax webmethod


    【解决方案1】:

    这是因为WebMethod 属性内部工作。当您使用此属性标记某些方法时,它将通过PageName.aspx/MethodName url 可用。

    然后,将此方法移到外部库后,您也将其从页面方法中移出,然后就无法使用了。

    所以,如果你想重构你的代码,你必须将WebService 添加到你的项目中,你可以从那个类中调用其他库中的方法。

    您也可以像这样在您的客户端上创建一个 javascript 代理:

    <asp:ServiceReference InlineScript="true" Path="~/CustomersService.asmx"/>
    

    或者使用ScriptManager,像这样:

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

    之后你可以use this proxy instead of ajax call。

    <script type="text/javascript">
    function Add()
    {
       var x = $get("txtX").value;
       var y = $get("txtY").value;
       PageMethods.Add(x, y, OnWSAdd);
    }
    
    function OnWSAdd(result)
    {
       $get("spanAddResult").innerHTML += result;
    }
    </script>
    

    Old, but great article about Understanding ASP.NET AJAX Web Services.

    【讨论】:

    • 我不确定我的理解是否正确,但据我所知,我没有移动我从 javascript 调用的函数(GetEmployeeDetails),我只是移动了函数( GetEmployeeDetails) 正在使用
    • @Mac 不,我不是在谈论 javascript。我说的是你不能只移动方法,因为它是页面的一部分,可以通过 javascript 访问。
    猜你喜欢
    • 2011-03-02
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2011-12-11
    • 1970-01-01
    • 2015-11-13
    • 2016-12-23
    相关资源
    最近更新 更多