代码之家  ›  专栏  ›  技术社区  ›  typemismatch

绑定没有controller/http.context的模型

  •  2
  • typemismatch  · 技术社区  · 16 年前

    我有一个叫做“通道”的模型,它有许多字符串属性。

    我从返回哈希表的数据源获取数据。此表的键与我的模型的属性名匹配。

    如何将哈希表自动绑定到通道模型?

    来自ASP.NET MVC的绑定器似乎可以做到这一点,但您需要在具有上下文的控制器中使用它。我不想将上下文传递到我的存储库中,以便在获取数据时使其正常工作。(尽管我想如果需要我可以)

    1 回复  |  直到 16 年前
        1
  •  1
  •   queen3    16 年前

    方法本身是如此的简单,以至于您不能期望它的“现有”解决方案:

    public static T Bind<T>(IDictionary<string, string> hash, T channel)
    {
       foreach (var item in hash)
       {
            var prop = typeof(T).GetProperty(item.Key);
            prop.SetValue(channel, Convert.ChangeType(item.Value, prop.PropertyType), new object[0]);
       }
    }
    

    这就是你所需要的一切。现在,您可以在不使用任何控制器的情况下单独使用此方法,或者编写使用它的模型绑定器。

    可以对嵌套属性进行更多的工作(您没有说需要这样做),但是使用递归编写还需要5分钟。