我正在使用 WebForms,但使用的是 VB.Net。我将尝试指导您完成这些步骤,但您必须使用 c# 的语法。
基本上,所有 ASP:Buttons 都会提交表单。你真正的意思是,当你按下button2时,应该有一个处理button2的方法。在该方法中,您可以创建动态控件。示例:
protected sub addFields() 处理 button2.click {
Dim field1 as type;
Dim field2 as type;
set properties of the fields;
//you need to place a placeholder on the aspx page
id_of_placeholder.controls.add(field1); -> so on
}
现在添加了所有字段,使用视图状态您可以存储和检索按钮 2 被单击的次数。
回发完成后,所有动态添加的字段都将丢失,因为 ASP.Net 仅跟踪 aspx 页面上的控件。您需要在 page_load 方法上重建它们(通过了解用户单击 button2 的次数,您可以创建一个循环并重新添加字段)。因为动态添加的控件丢失了,它们持有的数据也丢失了!!在 aspx 页面上使用 ASP:HiddenField,以便 javascript 可以将用户选择的数据放入其中。
伪代码:
js:
for each field {
//clientidmode = "static" can be used to make the id of hiddenfield predicatable
getHiddenField.text = getHiddenField.text + field.text + ",";
}
c#:
page_load 方法 {
get viewstate containing button2 clicks;
string userdata = hiddenfield.text
for i = 0 to clicks - 1 {
add fields
//comma used as data seperator
for i = 0 to fieldscount {
//field(i) standing for each field
//substring, so we get the first data and assign it to field
field(i).data = userdata.substring(0, userdata.firstIndexOf(","));
//now delete the retrieved data, so we can loop
userdata.removeTheDataBeforeFirstComma;
}
}
}
在此之后,您应该能够动态添加控件、显示它们并在回发时检索它们的数据。
当您达到这一点时,请尝试将字段存储在 Viewtate 中。这样就不用使用hiddenfields了,看下Viewtate这个字段是否存在,如果存在,添加即可。
问候
马赫什瓦拉