我在ASP.Net(Visual Studio)中有一个webform。我在表单上有两个按钮,一个按钮(按钮1)提交表单,另一个按钮(按钮2)将用于向表单添加其他字段。我希望能够单击按钮2,只需单击一下即可添加当前在表单上的所有字段。用户还应该能够添加多达20个这样的附加字段集。谢谢!
答案 0 :(得分:0)
我正在使用WebForms,但使用的是VB.Net。我将尝试指导您完成这些步骤,但您必须使用c#的语法。
基本上,所有ASP:按钮都会提交表单。你的意思是,当你按下button2时,应该有一个方法处理按钮2。在该方法中,您可以创建动态控件。例如:
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
}
现在添加了所有字段,使用viewstate可以存储和检索button2被点击的次数。
当回发完成后,所有动态添加的字段都将丢失,因为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字段是否存在,如果是,则添加它们。
此致
Maheshvara