Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用jquery调用ascx页面方法_Asp.net_Jquery_Web Services_Asmx_Pagemethods - Fatal编程技术网

Asp.net 使用jquery调用ascx页面方法

Asp.net 使用jquery调用ascx页面方法,asp.net,jquery,web-services,asmx,pagemethods,Asp.net,Jquery,Web Services,Asmx,Pagemethods,我知道我可以使用以下语法使用jquery调用page方法 $.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'

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

$.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页面时,我am正在更新jquery中的url:)

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

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

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


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

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

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


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

在.aspx页面上创建一个方法来处理控件中的信息,怎么样?我知道人们在控件应该包含什么或不包含什么的问题上进行了反复讨论,但如果控件只包含属性和对象,我认为在.aspx页面中使用该函数可能对您有用。显然会有很多折衷办法。

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

这里有一种方法可以绕过ASPX页面中仅提供页面方法(ScriptMethod)的限制。本例使用页面基类和特殊属性构建代理,以修饰ASCX页面代码中的方法,并通过客户端访问这些方法


您可以在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
{
//你的代码在这里

}

我想补充一点,您提供代码片段的方式是在页面上包含控件,而不是复制代码。如果控件也用于服务器端,我完全同意。但是,如果其目的纯粹是用作jQuery回调,并且该控件从未在服务器端内联使用另一个aspx页面,那么这就是不必要的混乱。在这种情况下,只需将代码放入aspx页面。看起来您的链接已失效。+1。这篇文章让我开始使用jQuery和PageMethods.Link标记为有恶意软件。Chrome和Firefox阻止它这里的第一部分起作用了吗?我必须将JSON数据发送到ascx.cs文件中的函数,而不必将此ascx标记和代码重构到其包含的aspx页面中。