Web用户控制回发问题

本文关键字:问题 控制 用户 Web | 更新日期: 2023-09-27 18:16:44

我是ASP.net的新手,我有一些关于回发的问题。

我有一个这样的场景:

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

2)我通过调用 来"插入"带有Web用户控件的面板
 Control ctlControl;
 ctlControl = LoadControl("~/UserControls/ChequeCreation.ascx");
 pnlTransaction.Controls.Add(ctlControl);

3)提供两个按钮的Web用户控件。一个是"update",一个是"reset"。

问题是这样的:

我想要实现的是当按下"更新"按钮时,它会更新一些东西回我的DB?但似乎之后我按下按钮"更新"或"重置"。web用户控件消失或丢失。对我的客人来说是因为回发问题吗?对吗?

我试过if(!postback)仍然不工作。

我要怎么克服这个?我已经为一天的事挠头了?

谢谢你。

LiangCk:

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

Web用户控制回发问题

你可以将任何数据列转换为模板列,然后拖放你的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>

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

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

你必须每次重新加载Page_Init或用户控件employee。然后你可以得到按钮点击事件和之后的用户控制不会失去。

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();
}