使用 jquery 调用 ascx 页面方法

Posted

技术标签:

【中文标题】使用 jquery 调用 ascx 页面方法【英文标题】:calling an ascx page method using jquery 【发布时间】:2010-10-09 09:43:50 【问题描述】:

我知道我可以使用以下语法使用 jquery 调用页面方法

$.ajax(
  type: "POST",
  url: "Default.aspx/GetDate",
  data: "",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) 
    // Replace the div's content with the page method's return.
    $("#Result").text(msg.d);
  
);

这适用于 aspx 页面,但是否适用于 ascx 页面? (网络控制)

我已经尝试了大约半个小时,由于我无法让它工作,我想知道它是否可能。

注意:为了清楚起见,当我尝试调用 ascx 页面时,我正在更新 jquery 中的 url :)

【问题讨论】:

【参考方案1】:

不,因为 ascx 控件不代表可以从客户端计算机访问的真实 URL。它们是纯粹的服务器端,旨在嵌入其他页面。

您可能想要做的只是有一个aspx 页面,该页面提供与您当前在ascx 文件中的html 相同的sn-p。 aspx 页面不一定需要提供完整的 html 文档(

等),它可以只呈现您感兴趣的用户控件。

我们一直使用这种技术和 ingrid 插件,它需要一个回调 url 用于表格内容。

【讨论】:

我要补充一点,您提供 sn-p 的方式是在页面上包含控件,而不是复制代码。 如果控件也用在服务器端,我绝对同意。但是,如果目的纯粹是用作 jQuery 回调,并且该控件从未在服务器端使用内联另一个 aspx 页面,那么这只是不必要的混乱。在这种情况下,只需将代码放在 aspx 页面中即可。【参考方案2】:

我认为直接请求 ascx 文件是不可能的——即将“MyControl.ascx”作为 url 参数提供给 $.ajax(..)。 ascx 文件不直接由 Web 服务器公开。

我相信,您可以提供包含用户控件的 aspx 页面的 url——即如果 MyControl.ascx 的实例位于 MyPage.aspx 上,则必须提供“MyPage.aspx”作为 url 参数。听起来这可能会破坏您想要完成的目标。

编辑:克莱德在下面所说的似乎是个好主意。我自己也在做类似的事情,将 ascx 控件包含在一个页面上,该页面的工作或多或少只是为了托管它以供客户端脚本访问。

【讨论】:

这里的第一部分有效吗?我必须将 JSON 数据发送到 ascx.cs 文件中的函数,并且不必将此 ascx 标记和代码重构到其包含的 aspx 页面中。【参考方案3】:

我认为这是不可能的,因为用户控件并不意味着可以从外部(页面之外)访问。我建议只使用脚本服务(网络服务)。

【讨论】:

【参考方案4】:

如何在 .aspx 页面上创建一个方法来使用来自控件的信息来完成它需要的工作?我知道人们会反复讨论应该包含或不包含哪些控件,但是如果控件只包含属性和对象,我认为在 .aspx 页面中具有该功能可能对您有用。显然会有很多取舍。

【讨论】:

【参考方案5】:

This is an example of rendering a user control through a jQuery web service call.

【讨论】:

+1。这篇文章让我开始使用 jQuery 和 PageMethods。 链接标记为有恶意软件。 Chrome 和 Firefox 会阻止它【参考方案6】:

这是一种绕过 ASPX 页面中只有页面方法 (ScriptMethod) 的限制的方法。此示例使用页面基类和特殊属性构建代理,以装饰您的 ASCX 页面代码隐藏中的方法,并通过客户端访问这些方法。

Creating a Page method (ScriptMethod) within an ASCX user control using AJAX, JSON, base classes and reflection

【讨论】:

你的链接好像失效了。【参考方案7】:

我将创建一个通用处理程序 (.ashx),它加载控件并将其呈现的 HTML 写入响应。

【讨论】:

【参考方案8】:

您可以在 Default.aspx 或其他 aspx 文件中编写 GetDate() 方法您可以从 .ASCX 文件中调用该方法

例如:

在 UserControl.ascx 中:

$.ajax(
 type: "POST",
 url: "Default.aspx/GetDate",
 data: "",
 contentType: "application/json; charset=utf-8",
 dataType: "json",
 success: function(msg) 
 // Replace the div's content with the page method's return.
 $("#Result").text(msg.d);

);

在 Default.aspx.cs 中:

Public void GetDate() //Public static void //your code here

【讨论】:

以上是关于使用 jquery 调用 ascx 页面方法的主要内容,如果未能解决你的问题,请参考以下文章

可以使用 jQuery.load() 函数加载 ASCX 吗?

在 ascx 文件中使用 jquery [关闭]

从文件后面的 ascx 代码调用 Aspx javascript 函数

如何在 Jquery 中找到用户控件的第二个子项? [关闭]

如何在 ASCX 页面上的 ASP 网站上从 C# 代码执行 url 调用?

如何在 UserControl (.ascx) 中调用 ASP.NET WebMethod