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用户控件到它
这将导致类似下面的代码检查,其中"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();
}