使用jQuery调用ascx页面方法

24

我知道可以使用以下语法使用 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 页面(Web 控件)是否可行?

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

注意:为了明确起见,当我尝试调用 ascx 页面时,我正在使用 jQuery 更新 URL :)

8个回答

27

不行,因为ascx控件不代表一个真实的URL,客户端无法访问它们。它们仅用于嵌入到其他页面中的服务器端。

你可能想要做的是创建一个aspx页面,提供与您当前在ascx文件中具有相同的html片段。一个aspx页面不一定需要提供完整的html文档(<html><body>等),它只需要呈现您感兴趣的用户控件即可。

我们经常使用这种技术来处理ingrid插件,该插件需要一个回调URL来获取表格内容。


我想补充的是,您提供代码片段的方式是将控件包含在页面中,而不是复制代码。 - Joel Coehoorn
如果控件也在服务器端使用,我完全同意。然而,如果目的纯粹是作为jQuery回调使用,并且该控件从未在服务器端的另一个aspx页面中内联使用,则这只是不必要的混乱。在这种情况下,只需将代码放入aspx页面即可。 - Clyde

4
我认为直接请求ascx文件是不可能的,即将"MyControl.ascx"作为url参数提供给$.ajax(..)。ascx文件并没有直接暴露在Web服务器上。
我相信您可以提供包含用户控件的aspx页面的url,例如如果MyControl.ascx的实例位于MyPage.aspx上,则必须将"MyPage.aspx"作为url参数提供。但听起来这可能会破坏您想要实现的目的。
编辑:Clyde在下面说的似乎是一个好主意。我自己也正在做类似的事情,通过将ascx控件包含在一个页面中,该页面的工作基本上只是为了托管它以便从客户端脚本访问。

这里的第一部分是否有效?我必须将JSON数据发送到ascx.cs文件中的函数,而不想将此ascx标记和代码重构为其包含的aspx页面。 - Justin L.

2

4
看起来你的链接失效了。 - Corey Sunwold

2

我认为这是不可能的,因为用户控件不应该在页面外部被访问。我建议使用脚本服务(Web服务)。


2

那么在.aspx页面上创建一个方法来处理控件中的信息呢?我知道人们对控件应该包含什么或不应包含什么意见不一,但如果控件只包含属性和对象,我认为在.aspx页面中拥有该功能可能适合您。显然这会有很多权衡。


2

+1. 这篇文章让我开始接触jQuery和PageMethods。 - David Robbins
1
链接被标记为恶意软件。Chrome和Firefox都已经将其阻止。 - Justin L.

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

0
你可以在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() //公共静态方法 { //你的代码在这里 }

});


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接