如何获取名称和id为动态的表单字段的值

时间:2014-08-22 05:18:04

标签: c# sharepoint-2013

我是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部分是实际的归档名称。

enter image description here

3 个答案:

答案 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