2010-01-25 77 views
7

伙计们,我需要一些帮助。 我有一个ASP.NET WebSite和一个自定义控件(让我们称之为myControl)。 我需要使用AJAX调用此控件的方法。 我从JavaScript(jQuery)发布ajax调用到C#WebMethod。 这工作得很好,但我无法在静态WebMethod中访问myControl。 任何想法如何解决这个问题?从静态访问ASP.NET控件[WebMethod](JS ajax调用)

短版:从JS AJAX调用C#WebMethod的行为 - >*这里(此方法)我需要调用我的自定义控制的方法,这是因为静态方法类型的不可访问*

[WebMethod] 
public static List<CustomListControl.IListItem> GetListItems() 
{ 
    // CAN'T GET TO MY CONTROL - need to return myContorl.Items; 
    return null; 
} 
+0

[如何获取控件在静态web方法]可能的重复(https://stackoverflow.com/questions/8967763/how-to-get-controls-in-static-web-method) – 2018-02-19 13:50:46

回答

5

那么,这不是正确的做法。在Web服务方法级别,您无法看到关于页面结构的任何信息。在这种方法中,您只能加载项目列表并将其返回。这个列表绑定到的地方不是GetListItems的业务。

您可以通过实现回调函数(例如参见http://mattberseth.com/blog/2007/06/aspnet_ajax_invoke_a_static_me.html)或使用UpdatePanel方法来管理项目的显示。

+0

我不是当然我们理解对方:) 我必须实现一个同步列表(客户端列表必须与服务器上的列表相同),因此每个更改都必须发布到服务器。 例如,我想用ajax删除一些项目 - 用户删除列表中的项目和ajax调用自定义控件方法,它将删除服务器列表中的此项目。 [WebMethod]应该像代理或调解员: JS ajax调用* .aspx方法 - >此方法调用customControl的方法 – Heko 2010-01-25 15:32:48

+0

我错误地写了一个web服务方法,但不改变参数:)。只要您使用WebMethod,您就无法访问该级别的控件。您可以管理Context对象,Session等,或者调用外部库,但仅此而已。
只有两种方法可以做你想做的事情:
1 - 使用UpdatePanel(移除JQuery调用)。使用此解决方案,您可以像在完整的回发场景中一样管理方法中的控制。 2 - 将web方法的结果注入到现有的标记中。 – mamoo 2010-01-25 15:54:12

+0

谢谢!我会尝试;) – Heko 2010-01-25 16:35:30