Web用户控制回发问题

时间:2011-12-05 09:15:26

标签: c# asp.net ajax postback webusercontrol

我是ASP.net的新手,我对回发有一些疑问。

我有这样的Senario:

1)网上有一个网格,里面有一个面板。

2)我通过调用

“插入”带有Web用户控件的面板
 Control ctlControl;
 ctlControl = LoadControl("~/UserControls/ChequeCreation.ascx");
 pnlTransaction.Controls.Add(ctlControl);

3)Web用户控件提供两个按钮。一个是“更新”,一个是“重置”。

问题就在这里:

我想要实现的是当按下“更新”按钮时,它会将某些内容更新回我的数据库?但似乎在我按下“更新”或“重置”按钮后。 Web用户控件已消失或丢失。对于我的客人是因为回发问题?这是对的吗?

我试过(!postback)仍然无效。

我将如何克服这个问题?我已经摸不着头脑了一天?

非常感谢你。

此致

LiangCk:

PS:对不起我的英语水平,请不要犹豫,说出我的错误或错误。

4 个答案:

答案 0 :(得分:1)

您可以将任何数据列转换为模板列,然后将您的Web用户控件拖放到该列

这将导致类似下面的代码检查“uc1:webUserControle1”在代码中的位置

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDB">
            <Columns>
                <asp:TemplateField HeaderText="ID" SortExpression="ID">
                    <EditItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("ID") %>'></asp:Label>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("ID") %>'></asp:Label>
                        <uc1:webUserControle1 ID="WebUserControle1_1" runat="server" />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="name" HeaderText="name" SortExpression="name" />
            </Columns>
        </asp:GridView>

答案 1 :(得分:1)

如果您使用的是AJAX,请尝试在UCT设计页面上添加updatepanel

答案 2 :(得分:1)

ASP.NET不会在回发之间保留动态添加的用户控件。这就是为什么它消失了。每次创建页面时都需要添加控件。但是,您需要在初始化控件树时添加它,如果希望触发事件,则还原原始控件ID。这些链接提供了完整的解释http://www.4guysfromrolla.com/articles/092904-1.aspxhttp://avinashsing.sunkur.com/2011/02/24/dynamic-controls-viewstate-and-postback/

答案 3 :(得分:1)

您必须每次都在Page_Init或上重新加载用户控件 Page_Load中。然后你可以获得按钮点击事件和用户之后 控制不会丢失。

private void LoadUserControl(){

   string controlPath = LastLoadedControl;

    if (!string.IsNullOrEmpty(controlPath)) {
        PlaceHolder1.Controls.Clear();
        UserControl uc = (UserControl)LoadControl(controlPath);
        PlaceHolder1.Controls.Add(uc);
    }
}

protected void Page_Load(object sender, EventArgs e) {  
   LoadUserControl();
}