MVC4:从字符串到对象映射获得有用模型绑定的最简单方法

时间:2013-03-11 19:33:49

标签: c# asp.net-mvc

我在MVC控制器中。我有一个课程,我希望MVC能够像处理GuidDateTime一样处理这个课程的价值观。那就是:

  • 当类类型的实例写出到表单时,它是一个单独的格式化字符串而不是单独的字段。
  • 当回发一个值(以字符串形式)时,它会自动转换回该类的实例。

从概念上讲,实现这一点应该只需要每个方向的转换函数。假设我们有一个或多个实现此接口的对象:

namespace SomeExample
{
    public interface SomeStringConversion<T>
    {
        T ConvertFromString(string str);
        string ConvertToString(T obj);
    }
}

// Example: What such a class for Guid might look like
namespace SomeExample
{
    public class SomeGuidStringConversion : SomeStringConversion<Guid>
    {
        public Guid ConvertFromString(string str)
        {
            return Guid.Parse(str);
        }

        public string ConvertToString(Guid g)
        {
            return g.ToString();
        }
    }
}

并且说我们无需在ConvertFromString()接受或拒绝的内容之外进行验证。

SomeStringConversion<T>的集合到使用它们的控制器,最直接的路径是什么(即尽可能少的关于模型绑定的无关特征的无关细节)?

编辑:我一直是开发人员,但在MVC方面,我是新鲜的。我需要一个代码示例,我可以向后工作。高级描述不会有太大帮助。

1 个答案:

答案 0 :(得分:0)

我能看到实现这一点的最直接的方式是使用自定义模型绑定器。

binder检查要绑定的模型类型是否实现SomeStringConversion<T>接口,如果是,则尝试将模型绑定到传入的字符串值。如果没有,它只是推迟到DefaultModelBinder采取默认的模型绑定行动。

如果字符串结构格式正确,您可以实现ValueProvider以将值提供给模型绑定器以进行模型绑定。