ASP.Net/AJAX-使用c#在asp.net中动态加载usercontrol后事件不会触发

时间:2011-10-29 08:07:48

标签: jquery asp.net ajax dynamic

我已经在我的asp.net应用程序中使用jquery ajax动态加载了一个用户控件。

除了用户控件加载后,页面上的asp.net链接按钮没有触发click事件,所以每件事都运行正常。链接按钮未动态加载。

请帮我解决这个问题。

谢谢

Shibin V.M

html标记

注销

                    更多                                      

js web方法调用函数

 function callRefinepopUpAjax(type, id) 
 {    
    var panel_popup_layer =  $('#id');
    var val;
    if (Serach.hasOwnProperty(type))
        val = Serach[type];

    $.ajax({
        type: "POST",
        url: "../ProfileSearchService.asmx/LoadRefinePopUp",
        data: "{Type:'" + type + "',Value:'" + val + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {

            $(panel_popup_layer).html(msg.d);
            setUp();
        }

    });    
}

网络方法

public string LoadRefinePopUp(string Type, string Value)
{
    Page page = new Page();
    UserControl ctl = new UserControl();
    ArrayList list = new ArrayList();
    list.Add(Value);
    Context.Items["WebForm1List"] = list;
    try
    {
        ctl =
           (UserControl)page.LoadControl("~//popup" + Type + ".ascx");



        HtmlForm form = new HtmlForm();


        form.Controls.Add(ctl);
        page.Controls.Add(form);

        StringWriter textWriter = new StringWriter();

        HttpContext.Current.Server.Execute(page, textWriter, false);


        return CleanHtml(textWriter.ToString());
    }
    catch (Exception ex)
    {

        return ex.toString();

    }




}

2 个答案:

答案 0 :(得分:0)

你可以这样试试......

注意:这是一个例子......如果你指定你的用户控件(代码),那么它将是有用的....

假设类型的名称遵循文件名,您可以将其强类型为该类型,例如,

var myUserControl = Page.LoadControl("~/View/EditScheduleProgram.ascx") as EditScheduleProgram;

然后您可以访问由该类型公开的任何自定义(或特定)事件,但不能访问Control,因此,

myUserControl.MyEvent += MyEventHandler;

答案 1 :(得分:0)

我知道这个问题是在5年前提出来的,但是我今天来了,并且遇到同样的问题。也许我的回答可以帮助任何人。基于this article,您无法以这种方式创建用户控件时触发单击事件。然后,您必须依赖从客户端处理的按钮。如果您尝试不动态地将用户控件添加到页面中,则会在页面加载时触发事件(check here