【问题标题】:Updating string properties of an object using enumeration使用枚举更新对象的字符串属性
【发布时间】:2012-08-23 15:53:25
【问题描述】:

我在一个 aspx 页面上有大量文本框,其 ID 以“txt”为前缀,其余 ID 在某个对象中具有相同名称的相应属性。我希望能够枚举这些字符串属性并在找到同名文本框(删除前缀)的地方更新它们。有任何想法吗?我知道使用Dictionary 可以解决这个问题,但这并不理想。

【问题讨论】:

  • 这似乎是一个难以处理的设计。它是否会发生变化?每当您设计的东西似乎唯一的解决方案似乎是“使用反射”时,您必须问自己是否确定不能更好地设计它。
  • 如果您觉得某个答案对您有帮助,那么您应该点赞和/或点击旁边的复选框将其标记为答案,不要只是将其编辑到您的问题中。
  • 我不得不等待点击它被锁定的复选框。谢谢大家。

标签: c# asp.net .net ienumerable enumeration


【解决方案1】:

您可以使用反射来做到这一点:

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);
}

【讨论】:

  • 那么看看你有什么,这会从我的对象中获取每个属性并用匹配文本框的值更新它?
  • 唯一的事情是我只想获取字符串属性而不是全部
  • 在没有属性文本框时添加对 null 的检查
【解决方案2】:

您可以使用控件:

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

【讨论】:

    【解决方案3】:

    只需找到页面上的所有文本框控件,然后使用反射填充相应的属性。

    【讨论】:

      猜你喜欢
      • 2010-11-29
      • 2017-07-12
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多