Jquery 带ASP.NET的AJAX:如何使用AJAX调用用户控件的方法?
我有一个母版页,它有一个占位符来生成Jquery 带ASP.NET的AJAX:如何使用AJAX调用用户控件的方法?,jquery,asp.net,ajax,user-controls,Jquery,Asp.net,Ajax,User Controls,我有一个母版页,它有一个占位符来生成Default.aspx Default.aspx定义一个用户控件: <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> <uc:maincontent ID="maincontent" runat="server" /> </asp:Content> 然后,我想调用一个方法,在User Controlco
Default.aspx
Default.aspx
定义一个用户控件
:
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<uc:maincontent ID="maincontent" runat="server" />
</asp:Content>
然后,我想调用一个方法,在User Control
code-behind中定义:
[System.Web.Services.WebMethod]
public static string GeneratePdfs()
{
string test = "Test String";
return test;
}
为此,我有以下jQuery
code:
$('#btnGenerate').click(function () {
if (!ValidateInput()) {
return false;
}
$.ajax({
type: "POST",
url: "????"
.....
});
我还使用以下代码创建了一个通用处理程序
。我在stackoverflow上找到了这个例子
public void ProcessRequest (HttpContext context) {
using (var writer = new System.IO.StringWriter())
{
Page pageHolder = new Page();
var control = (UserControl)pageHolder.LoadControl("~/controls/maincontent.ascx");
pageHolder.Controls.Add(control);
context.Server.Execute(pageHolder, writer, false);
context.Response.ContentType = "text/html";
context.Response.Write(writer.GetStringBuilder().ToString());
}
}
但是这个例子没有解释如何调用我的用户控件中定义的Web方法
完成这样的事情的正确方法是什么?你做得不好。将用户控制的逻辑抽象为用户控制可以调用且AJAX处理程序可以调用的方法。AJAX和Web表单控件没有很好地结合在一起。那么有什么更好的方法呢?我应该在ASP.NET AJAX中使用更新面板
?或者我应该只创建一个简单的html
页面而不使用ASPX页面吗?亲爱的上帝,不,永远不要使用UpdatePanel。ASPX很好,但是AJAX调用不应该依赖于对控件的操作。那么我该怎么做呢。不要使用用户控件
,直接将其内容放入Default.aspx
页面,然后从那里调用AJAX?想想AJAX控件应该完成什么。作为一个用户控件,这种逻辑真的有意义吗?
public void ProcessRequest (HttpContext context) {
using (var writer = new System.IO.StringWriter())
{
Page pageHolder = new Page();
var control = (UserControl)pageHolder.LoadControl("~/controls/maincontent.ascx");
pageHolder.Controls.Add(control);
context.Server.Execute(pageHolder, writer, false);
context.Response.ContentType = "text/html";
context.Response.Write(writer.GetStringBuilder().ToString());
}
}