模型绑定到DataTable,没有底层数据库

时间:2011-03-28 23:54:53

标签: asp.net-mvc

我通过我的第一个ASP MVC项目引导自己,并且可以使用一些关于我应该追求的最合适(数据方)模型绑定解决方案的建议。这个项目很“小”,这实际上只是意味着我追逐死胡同的时间非常有限,这让我的学习曲线变得越来越糟糕。感谢大家阅读!

后台:一个简单的地址搜索应用程序(ASP.NET MVC 3),它将用户表单输入发送到供应商来源的服务器,并以规则驱动的格式显示从服务器返回的结果。没有CRUD风格的存储库;这是一个完全只读的应用程序。供应商的.NET服务器API为请求和回复指定使用DataTable对象(System.Data.DataTable)。

目前:我正在构建一个原型来验证服务器行为并通知应用程序的设计。输入表单有一个传统的MVC数据模型类,它可以很好地工作,并且可以像您期望的那样自动绑定视图。提交时,控制器将此输入模型传递给我的供应商API包装器,该包装器当前绑定到中世纪风格的请求表:

public DataTable GetGlobalCandidateAddresses(AddressInputModel input)
{
    ...
    DataRow newRow = dataTable.NewRow();
    newRow[0] = input.AddressLine1;
    newRow[1] = input.AddressLine2;
    newRow[2] = input.AddressLine3;
    ...
    dataTable.Rows.Add(newRow);
    ...

这很好用;输入是固定的,具有非常轻的验证要求。但是,如果有一个现代框架解决方案可以快速反映我的模型中的DataTable,那将是很好的。

然而,我真正的难题在于答复。服务器返回的表包含一个变量列集,每个事务基础上至少包含32个可能的无序字段的任意组合。某些列名称包含编译器无效字符("status.description"),这些字符不会按字面意义映射到模型属性名称。我还需要根据一系列规则动态映射或组合视图模型中的一些回复字段(地址格式因国家/地区而异),因此并非所有字段都是1对1。

为了让原型启动并运行,我正在将回复DataTable实例一直传递回强类型视图,该视图将其完全按原样旋转到显示中。这对于快速验证服务器回复很有用,但对于真正的应用程序来说还不够(更不令人满意的最佳实践!)。

问题:将DataTable行和列绑定到适当的模型类中以便在视图中显示的最佳工具方法是什么,包括一些自定义绑定规则,其中不存在底层数据库?

我正在使用的几乎所有培训材料都讨论了经典的数据库存储库方案。实体框架中可用的OnModelCreating覆盖在某些方面似乎是理想的,但您可以使用没有数据库连接或架构的DBContext吗?

如果我必须推出自己的模型活页夹,是否有任何技巧我应该考虑?我已经离开.NET一段时间了(主要是Java和SQL),所以我和MVC一样接受LINQ。

再次感谢您的关注!

1 个答案:

答案 0 :(得分:1)

创建一个poco显示模型AddressDisplay并执行从数据表到显示模型的自定义对象映射。您可以使用数据注释进行格式化,但也可以在自定义映射中执行此操作。您不需要创建自定义模型绑定器。

因此,创建两个poco模型,AddressInput和AddressDisplay,您可以使用AddressInput上的数据注释进行验证。发回AddressInput时,将其映射到出站数据表。收到响应后,将入站数据表映射到AddressDisplay并将视图返回给用户。