控制导致了回发

时间:2011-08-02 07:15:52

标签: asp.net user-controls drop-down-menu postback

我有一个包含下拉列表的表单, 在索引更改的方法,我将调用我的用户控件类.cs与用户选择的参数,当我把我的代码在索引中更改像下面的代码,它不起作用,这是一个正常的行为:

 protected void ResourceTypesDDL_SelectedIndexChanged(object sender, EventArgs e)
    {
        ....
        MyUsercontrol c = new MyUSercontrol(....);
        this.panel.controls.add(c);
    } 

这就是为什么我必须把代码放在我的onload方法中,但问题是我怎么知道它是否是导致帖子返回的ddl?有财产吗?或者我应该使用 page.Request.Params.Get(“__ EVENTTARGET”)技术? 非常感谢!

3 个答案:

答案 0 :(得分:2)

如果您的MyUserControl真的是用户控制,这意味着.ascx文件,您应该使用它:

Page.LoadControl("~/Controls/MyUserControl.ascx")

而不是通过直接调用构造函数来创建控件的实例。

protected void ResourceTypesDDL_SelectedIndexChanged(object sender, EventArgs e) {
        ....
        var c = Page.LoadControl("~/Controls/MyUserControl.ascx");
        this.panel.controls.add(c); 
}

编辑:

但是,当然,在每回事后,你都会失去这种控制。因此,您还应确保在OnLoad事件期间创建所有动态控件。

答案 1 :(得分:1)

在下拉列表中设置属性autoPostBack = true,以便页面回发

或使用以下函数在page_load

上获取回发控制
private string GetPostBackControl()
    {
        string retVal = string.Empty;
        try
        {
            string ctrlname = Page.Request.Params.Get("__EVENTTARGET");
            if (ctrlname != null && ctrlname != string.Empty)
            {
                Control ctrl = this.Page.FindControl(ctrlname);
                if (ctrl != null)
                {
                    retVal = ctrl.ID;
                }
            }
        }
        catch (Exception ex) { ManageException(ex, ShowGeneralErrorMessage); }

        return retVal;
    }

答案 2 :(得分:0)

尝试设置下拉列表的AutoPostBack="True"属性。在列表中选择项目后设置此属性后,它将自动执行回发,并且您的事件ResourceTypesDDL_SelectedIndexChanged将被触发。