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

C# 如何获取名称和id为动态的表单字段的值,c#,sharepoint-2013,C#,Sharepoint 2013,我是Sharepoint 2013和.NET c的新手,所以大家放松点 我正在写一个动态生成输入表单的Web部件。每个表单可能有不同的字段,因此在运行时定义字段名/ID 这是我生成输入文本的代码fieldname是我这里的变量,它是ID,最好是输入框的名称fieldtitle是显示名称,fielddefaultvalue是默认值。此代码部分位于循环中,每次都将所有输入添加到占位符1 TextBox formfield = new TextBox(); formfield.ID = fieldna

我是Sharepoint 2013和.NET c的新手,所以大家放松点

我正在写一个动态生成输入表单的Web部件。每个表单可能有不同的字段,因此在运行时定义字段名/ID

这是我生成输入文本的代码
fieldname
是我这里的变量,它是ID,最好是输入框的名称
fieldtitle
是显示名称,
fielddefaultvalue
是默认值。此代码部分位于循环中,每次都将所有输入添加到
占位符1

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部分是实际的文件名


您是否尝试过:formfield.ClientId

添加文本框时,您可以将其缓存在字典中:

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);
}
[编辑]如果我理解正确,您希望提交表单并获取所有输入的空白字段名称文本:

void OnSubmitButtonClick(Object sender, EventArgs e)
{
   foreach(KeyValuePair<string, TextBox> keyValue in textBoxesByFieldName){
      string fieldName = keyValue.Key;
      string fieldValue = keyValue.Value.Text; 
   }
}
void onSubmitButton单击(对象发送方,事件参数e)
{
foreach(文本框ByFieldName中的KeyValuePair keyValue){
字符串字段名=keyValue.Key;
字符串fieldValue=keyValue.Value.Text;
}
}
[edit2]上述解决方案需要
formfield.AutoPostBack=true待设置


要避免页面刷新,请使用
string fieldValue=page.Request.Form[((System.Web.UI.Control)(keyValue.Value)).UniqueID]

请求。表单[…]需要控件的名称索引,因此设置控件的名称

formfield.Name = fieldname;

我不是一个网络爱好者,但这些天我们不能将ClientMode设置为静态吗?@danish无法帮助输入文件,但仍然有唯一的名称。添加了屏幕截图。我尝试了这个,但值为空。我需要在提交表单时获取值,而不是在创建表单时获取值。我的意思是,单击按钮时,我需要使用干净的字段名,而不是那些随机数,并获取最终用户提交的值。@Ergec我已编辑了答案。希望我能理解你想做的事,但那没用。主要问题是我的输入文件名很奇怪。如果它们是普通的名字,我很容易就能找到。我添加了一个屏幕截图,显示输入字段的名称。@Ergec是的,SP会动态生成这些ID(顺便说一句,如果您更改页面布局,这些ID也可能会更改)。你的域名来自哪里?这不是你想用的吗?在我的示例中,我从不访问生成的ID。是的,我知道ID可能会在不同的页面上更改。如果我能在某个地方找到保存的ID,并在将字段保存到字典时与我的变量组合,那就太棒了。生成的字段名并不简单,比如
Email
等。它们就像
ctl00$ctl39$g_76a6fb01_d2b4_4087_a988_8b34b95dc136$Email
。这就是它的生成方式,因此我无法使用
Page.Request.Form[“Email”]
获取它们。我需要找到一种方法来覆盖我的输入名称,使其简单,或者找到一种方法来获取生成的唯一ID并使用Request.Formuse
formfield.ClientMode=System.Web.UI.ClientMode.Static
,但使ID比“email”更通用,它可能与页面上的其他组件冲突。不,我已经尝试过了,字段名也是通用的。仍然输入字段名是自动生成的,必须强制ClientMode…只需迭代Forms集合并找到包含唯一id的键
formfield.Name = fieldname;