【问题标题】:Access ASP.NET control from static [WebMethod] (JS ajax call)从静态 [WebMethod] 访问 ASP.NET 控件(JS ajax 调用)
【发布时间】:2011-01-09 03:28:17
【问题描述】:

我有一个 ASP.NET 网站和一个自定义控件(我们称之为 myControl)。 我需要用 AJAX 在这个控件上调用一个方法。 我将 ajax 调用从 JavaScript (jQuery) 发布到 C# WebMethod。 这很好用,但我无法在静态 WebMethod 中访问 myControl。 任何想法如何解决这个问题?

短版: 从 JS 到 C# WebMethod 的 AJAX 调用有效 -> * 在这里(在此方法中)我需要在我的自定义控件上调用一个方法,由于静态方法类型而无法访问 *

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

【问题讨论】:

标签: c# asp.net ajax user-controls pagemethods


【解决方案1】:

嗯,这不是正确的方法。在 Web 服务方法级别,您看不到任何有关页面结构的信息。在这种方法中,您只能加载您的项目列表并将其返回。此列表绑定到的位置与 GetListItems 无关。

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

【讨论】:

  • 我不确定我们是否相互理解 :) 我必须实现一个同步列表(客户端列表必须与服务器上的列表相同),因此每个更改都必须发布到服务器。例如,我想用 ajax 删除一些项目 - 用户删除列表中的一个项目,然后 ajax 调用自定义控制方法,该方法会删除服务器列表中的这个项目。 [WebMethod] 应该像代理或中介:JS ajax 调用 *.aspx 方法 -> 此方法调用 customControl 上的方法
  • 我错误地写了一个网络服务方法,但这并没有改变论点:)。只要您使用的是 WebMethod,您就无法访问该级别的控件。您可以管理 Context 对象、Session 等,或者调用外部库,仅此而已。
    您只有两种方法可以做您想做的事情:
    1 - 使用 UpdatePanel(删除 JQuery 调用)。使用此解决方案,您可以像在完整的回发方案中一样管理方法中的控件。 2 - 将 web 方法的结果注入现有标记中。
  • 再问一个问题 - 你知道通过 UpdatePanel 从 JS 调用 CS 文件中方法的最佳方式吗?当 controlID 位于控件本身时,如何使用触发器?示例:用户单击一个链接,该链接应该使用一些参数进行部分回发...我如何从 JS 中做到这一点?简短:用户做某事 - js 发挥了魔力,然后应该使用 updatePanel 将(ajax)更改(一些参数)发布到服务器 - 如何从 js 做到这一点?再次感谢...
  • 一旦您将需要异步更新的控件放置到一个或多个UpdatePanel 中,您就不需要JS 函数来直接调用这些方法。您可以像往常一样分配一个 EventHandler,其余的由框架完成。你可以在这里找到一个相当简单的教程:asp.net/learn/ajax/tutorial-01-cs.aspx
  • 嗯,我有点理解,但我不确定这是否可行。我有一个自定义控件,它有一个项目列表(使用拖放 jQuery、内联编辑等)。如何从 UpdatePanel (EventHandlers) 捕获这些事件?我是否使用来自 customControl 具有的事件的 EventNames 分配触发器?
猜你喜欢
  • 2013-01-19
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
相关资源
最近更新 更多