2012-08-23 55 views
2

我在一个aspx页面上加载了一个文本框,其ID以“txt”为前缀,ID的其余部分在某个对象中具有相同名称的对应属性。我希望能够通过这些字符串属性进行枚举,并在发现具有相同名称(删除前缀)的文本框的位置进行更新。有任何想法吗?我知道通过使用Dictionary我可以解决这个问题,但它并不理想。使用枚举更新对象的字符串属性

+0

这似乎是一个困难的设计处理。它是否可以改变?每当你设计出唯一的解决方案似乎是“使用反思”的东西时,你必须问自己,如果你确信你不能更好地设计它。 – Servy

+0

如果您觉得某个答案对您有帮助,那么您应该通过点击旁边的复选框来选中它并/或将其标记为答案,而不要将其编辑为您的问题。 – Servy

+0

我不得不等待点击它被锁定的复选框。感谢大家。 – Roooss

回答

4

你可以做,使用反射:

MyObject data = new MyObject(); 
foreach (var pi in typeof(MyObject).GetProperties().Where(i => 
             i.PropertyType.Equals(typeof(string))) 
{ 
    var control = FindControl("txt" + pi.Name) as ITextControl; 
    if (control != null) 
     pi.SetValue(data, control.Text, null); 
} 
+0

因此,看看你有什么,这将使每个属性形成我的对象,并使用匹配的文本框的值更新它? – Roooss

+0

唯一的是我只想获得字符串属性不是所有的 – Roooss

+1

当没有文本框属性时添加检查为空 –

0

只是找到网页上的所有文本框控件,然后填写使用反射coresponding性能。

1

您可以用控制工作:

foreach (Control control in divXYZ.Controls) 
    if (control is TextBox) 
     ((TextBox)control).Text = "whatever"; 

的FindControl是,你可以在你的解决方案中使用的另一种方法:

Control myControl = FindControl("txtYourID"); 

http://msdn.microsoft.com/en-us/library/486wc64h.aspx