我是Sharepoint 2013和.NET c#的新手,所以请放轻松。
我正在编写一个动态生成输入表单的webpart。每个表单可能具有不同的字段,因此字段名称/ ID在运行时定义。
这是我生成输入文本的代码。 fieldname
是我的变量,它是ID,最好是输入框的名称。 fieldtitle
是显示名称,fielddefaultvalue
是默认值。此代码部分处于循环中,并且每次都将所有输入添加到PlaceHolder1
。
TextBox formfield = new TextBox();
formfield.ID = fieldname;
formfield.Text = fielddefaultvalue;
formfield.Attributes.Add("placeholder", fieldtitle);
PlaceHolder1.Controls.Add(formfield);
我的问题是,当我运行它时,输入字段的名称和ID就像
ctl00$ctl39$g_76a6fb01_d2b4_4087_a988_8b34b95dc136$Email
我尝试使用
获取提交的值 Page.Request.Form["Email"]
但没有成功。我想它也需要所有这些随机字符。
我也可以使用Email.Text
获取值,但Email
部分是动态的,来自变量。有没有办法使用包含fieldname
的变量Email
和其他字段名称作为字符串?
如何获取提交的值和/或将干净的名称添加到输入字段中。
请记住,我的字段名称是动态的,并且在for循环的每一轮都保存在fieldname
变量中。
修改
提交表单后,这是Page.Request.Form
的调试屏幕。我不知道在每个输入字段的开头如何/在哪里可以找到随机/唯一字符串。 flexiforms_xxx
部分是实际的归档名称。
答案 0 :(得分:0)
您是否尝试过:formfield.ClientId
答案 1 :(得分:0)
添加文本框时,可以将它们缓存在字典中:
Dictionary<string, TextBox> textBoxesByFieldName = new Dictionary<string, TextBox>();
foreach(string fieldName in FieldNames){
TextBox formfield = new TextBox();
formfield.ID = fieldname;
formfield.Text = fielddefaultvalue;
formfield.Attributes.Add("placeholder", fieldtitle);
PlaceHolder1.Controls.Add(formfield);
textBoxesByFieldName.Add(fieldname, formfield);
}
当你需要他们以这种方式访问TextBox时:
private TextBox GetTextBoxByFieldName(string fieldName){
TextBox textBox;
return textBoxesByFieldName.TryGetValue(fieldName, out textBox) ? textBox : null;
}
[edit] 如果我理解正确,您需要提交表单并获取所有输入的文字以获取干净的字段名称:
void OnSubmitButtonClick(Object sender, EventArgs e)
{
foreach(KeyValuePair<string, TextBox> keyValue in textBoxesByFieldName){
string fieldName = keyValue.Key;
string fieldValue = keyValue.Value.Text;
}
}
[edit2] 以上解决方案需要设置formfield.AutoPostBack=true;
要避免网页刷新,请使用string fieldValue = Page.Request.Form[((System.Web.UI.Control)(keyValue.Value)).UniqueID];
答案 2 :(得分:0)
Request.Form [...]需要控件的名称或索引,因此请设置控件的名称
formfield.Name = fieldname;
http://msdn.microsoft.com/en-us/library/ms525985(v=vs.90).aspx