0

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

我有一个这样的 Senario:

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

2) 我通过调用这个来“插入”带有 Web 用户控件的面板

 Control ctlControl;
 ctlControl = LoadControl("~/UserControls/ChequeCreation.ascx");
 pnlTransaction.Controls.Add(ctlControl);

3) Web User Control 提供两个按钮。一种是“更新”,一种是“重置”。

问题就像这里:

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

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

我将如何克服这一点?我已经挠头一天了?

非常感谢。

问候

梁克:

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

4

4 回答 4

1

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

于 2011-12-05T10:26:54.477 回答
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();
}
于 2011-12-05T10:28:28.710 回答
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>
于 2011-12-05T09:42:09.587 回答
1

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

于 2011-12-05T09:48:42.163 回答