使用jquery调用ascx页面方法

时间:2009-02-23 19:38:57

标签: asp.net jquery web-services asmx pagemethods

我知道我可以使用以下语法使用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:)

8 个答案:

答案 0 :(得分:26)

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

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

我们一直使用这种技术使用ingrid插件,这需要一个表内容的回调网址。

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

如何在.aspx页面上创建方法,使用控件中的信息执行所需的操作?我知道人们会回过头来讨论哪些控件应该包含或不包含,但如果控件只包含属性和对象,我认为在.aspx页面中使用该函数可能对你有用。显然会有很多权衡因素。

答案 4 :(得分:2)

答案 5 :(得分:2)

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

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

答案 6 :(得分:1)

我会创建一个Generic Handler(.ashx)来加载控件并将其呈现的HTML写入Response。

答案 7 :(得分:0)

您可以在Default.aspx中编写方法GetDate()或其他aspx文件并且您可以从.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 }