我在MVC控制器中。我有一个课程,我希望MVC能够像处理Guid
或DateTime
一样处理这个课程的价值观。那就是:
从概念上讲,实现这一点应该只需要每个方向的转换函数。假设我们有一个或多个实现此接口的对象:
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>
的集合到使用它们的控制器,最直接的路径是什么(即尽可能少的关于模型绑定的无关特征的无关细节)?
答案 0 :(得分:0)
我能看到实现这一点的最直接的方式是使用自定义模型绑定器。
binder检查要绑定的模型类型是否实现SomeStringConversion<T>
接口,如果是,则尝试将模型绑定到传入的字符串值。如果没有,它只是推迟到DefaultModelBinder
采取默认的模型绑定行动。
如果字符串结构格式正确,您可以实现ValueProvider
以将值提供给模型绑定器以进行模型绑定。