如何使用javascript调用UserControl(代码隐藏)中的函数

如何使用javascript调用UserControl(代码隐藏)中的函数,javascript,c#,asp.net,user-controls,Javascript,C#,Asp.net,User Controls,如何使用javascript调用UserControl(code behind-UserControl.ascx.cs)中的函数? 下面的方法似乎不起作用。仅当我将函数(AddLike)移动到嵌套UserControl的父页面的代码后面时,它才起作用。如果要调用的函数位于UserControl本身的代码隐藏中,则该函数不起作用 UserControl.ascx $.ajax({ type: "POST", url: "UserControl.ascx.cs/AddLike", /

如何使用javascript调用UserControl(code behind-UserControl.ascx.cs)中的函数? 下面的方法似乎不起作用。仅当我将函数(AddLike)移动到嵌套UserControl的父页面的代码后面时,它才起作用。如果要调用的函数位于UserControl本身的代码隐藏中,则该函数不起作用

UserControl.ascx

$.ajax({
    type: "POST",
    url: "UserControl.ascx.cs/AddLike", //This doesn't seem to work
    data: "{ IDphoto :" + IDphoto + "}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
})
UserControl.ascx.cs

[WebMethod]
public static string AddLike(int IDphoto)
{
        //My code        
}
parentPage.aspx

<uc:UserControl runat="server" />

您不能从usercontrol调用
WebMethods
。将此
WebMethod
放在将加载控件的页面的代码隐藏中。像这样改变它

$.ajax({
type: "POST",
url: "parentPage.aspx/AddLike", 
data: "{ IDphoto :" + IDphoto + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
})

您不能调用在用户控件的代码隐藏中定义的
WebMethod
。因此,可以避免重复代码的方法是将您的方法定义为用户控件的代码隐藏中的
静态方法,如下所示:-

public static string AddLike(int IDphoto)
{
        //My code        
}
然后从相应的
aspx
页面调用此方法,显然您将从Javascript触发此方法:-

[WebMethod]
public static string AddLikeMethod(int Id)
{
    return UserControl.AddLike(Id); 
}
最后,您可以像往常一样调用此方法:-

$.ajax({
    type: "POST",
    url: "Default.aspx/AddLikeMethod", 
    data: "{ IDphoto :" + IDphoto + "}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
})

尝试从url中删除“.cs”。它可能只是“UserComtrol.ascx/AddLike”,UserControls的目的在于它们是可重用的。如果我有10个页面将嵌套UserControl,这是否意味着我必须编写WebMethods 10次?这听起来“不对”。具有讽刺意味的是,你的解决方案似乎是唯一有效的。。。。。恶性循环!实际上,这不是我的解决方案,这是ASP.NET的默认行为。您可以在页面中编写webmthod,并创建一个函数,在JS中调用ajax方法。你可以重用这个函数。这就是我实际做的。。。。但我希望找到一个直截了当的解决办法!非常感谢。