我为针对 ASP.NET MVC 服务器的服务器端处理配置了一个 jQuery DataTable 。
为实现渐进增强,先呈现 HTML 表,然后升级为 DataTable。当 DataTable 进行 AJAX 调用以检索更多数据时,它期望返回的 JSON 的元素与现有的表列布局相关联。
这似乎会引起一些架构摩擦,因为:
在初始页面呈现期间:
- Controller 将数据库数据转换为 DTO 并建立 ViewData 模型。
- ViewPage 借助 HtmlHelper 等将 ViewData 模型转换为 HTML。
期间 AJAX 更新:
- 控制器将数据库数据转换为表格单元数据,带有超链接等。
- DataTable 将返回的数据直接呈现到表格单元格中。
这里的重点是控制器现在被迫了解表格呈现布局,而它的职责应该仅限于传回 DTO。
这里的正确模式是什么?如何支持 AJAX 调用并遵守控制器中的单一职责原则?
一些清晰:
我的 DTO 具有三个属性:
public class AccountListing
{
public int Id { get; set; }
public string AccountCode { get; set; }
public string AccountName { get; set; }
}
呈现的 DataTable 有四列:
+--------------+--------------+------+------+
| Account Code | Account Name | View | Edit |
+--------------+--------------+------+------+
| 12345 | FooBar Inc. | Link | Link |
+--------------+--------------+------+------+
ViewPage 将 3 属性 DTO 呈现为 4 列表。如果控制器传回与 AJAX JSON 相同的 3 属性 DTO,则数据表会抱怨缺少列……数据表期望返回的 JSON 代表单元格元素,而不是源数据。
目前我正在使用 jQuery 数组转换和自定义表格渲染来解决这个问题,这有效地复制了 ViewPage 的逻辑。
有没有其他选择?