我是ASP.net的新手,我对回发有一些疑问。
我有这样的Senario:
1)网上有一个网格,里面有一个面板。
2)我通过调用
“插入”带有Web用户控件的面板 Control ctlControl;
ctlControl = LoadControl("~/UserControls/ChequeCreation.ascx");
pnlTransaction.Controls.Add(ctlControl);
3)Web用户控件提供两个按钮。一个是“更新”,一个是“重置”。
问题就在这里:
我想要实现的是当按下“更新”按钮时,它会将某些内容更新回我的数据库?但似乎在我按下“更新”或“重置”按钮后。 Web用户控件已消失或丢失。对于我的客人是因为回发问题?这是对的吗?
我试过(!postback)仍然无效。
我将如何克服这个问题?我已经摸不着头脑了一天?
非常感谢你。
此致
LiangCk:
PS:对不起我的英语水平,请不要犹豫,说出我的错误或错误。
答案 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.aspx和http://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();
}