我有一个jQuery DataTable,用于针对ASP.NET MVC服务器进行服务器端处理。
要实现渐进式增强,将呈现HTML表格,然后升级到DataTable。当DataTable进行AJAX调用以检索更多数据时,它希望返回的JSON元素与现有的表 - 列布局相关联。
这个似乎导致一些架构摩擦,因为:
在初始页面呈现期间:
Duriung AJAX更新:
这里的要点是Controller现在被迫了解表格渲染布局,当它的责任应该仅限于传回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列表。 如果Controller传回与AJAX JSON相同的3个属性DTO,则数据表会抱怨缺少列...数据表期望返回的JSON表示单元格元素,而不是源数据。
目前我正在使用jQuery数组转换和自定义表格渲染来解决这个问题,这有效地复制了ViewPage的逻辑。
还有其他选择吗?
答案 0 :(得分:1)
您当前的解决方案(在客户端进行渲染)听起来不错。
问题是,您的DTO不必与您的视图页面显示的内容相对应。流行的模式是针对这些情况使用ViewModel对象。
例如:
public class AccountListingViewModel {
public string AccountCode { get; set; }
public string AccountName { get; set; }
public string ViewLink { get; set; }
public string EditLink { get; set; }
public static AccountListingViewModel FromAccountListing(AccountListing o) {
AccountListingViewModel returnObj = new AccountListingViewModel();
//populate the properties from the parameter
return returnObj;
}
}