我目前正在研究客户端模型绑定到HTML模板,特别是使用angularjs。我想知道从服务器检索客户端视图模型的最佳策略是什么,例如一个视图模型,不仅包含用于编辑的数据,还包含选择列表或下拉列表等的数据。
在我看来,有一个选项
我没有遇到选项1的许多示例,因为似乎web api主要用于返回一种类型对象的特定数据的crud操作,例如人或命令
选项2符合使用asp.net mvc的服务器端视图模型的做法,但我没有看到很多将这种技术与angularjs结合使用的例子
如果考虑分离问题,选项3看起来很干净,但缺点是多个较小的ajax请求。
你能分享一下你的想法和经历吗?
答案 0 :(得分:2)
就个人而言,我使用选项#3。该应用程序将发出“准备编辑器”的请求,例如填充下拉列表,以及获取要编辑的数据的请求(或者,如果要创建新对象,则为任何默认初始值)。我认为这比选项#1更好地区分了问题,选项#1将“模型”数据和“支持”数据联系在一起。
但是正如你所指出的那样,这确实会产生额外的电话,而且,如果频道很多,可能会显着减慢页面速度。 (或者增加复杂性;在具有大量依赖字段的大型表单上,排序可能变得很重要)。
我通常做的是让服务器提供“组合”api(例如/editor/prepare-all
),同时还提供小块(例如/editor/prepare-dropdown-1
,/editor/prepare-dropdown-2
)。加载编辑器时,使用组合的编辑器;如果字段之间存在依赖关系,则只能请求依赖字段的数据(例如/editor/prepare-dropdown-2?dropdown1-value=123
)。我相信这对服务器的复杂性几乎没有影响。
答案 1 :(得分:1)
我同意圣。从来没有明确使用选项#3,我认为结合$ resource和Web API将是一个完美的RAD组合。但是,我还在非常复杂的屏幕上工作,我想要亚秒级的响应时间,所以我采用优化整个开发“专栏” - 我使用SQL Server作为我的后端数据库进行开发,所以我使用了它对XML的本机支持从存储过程返回结构化XML,然后我将其序列化为.Net模型(POCO),然后将其传递给Json序列化程序以传输到浏览器。我可能会对POCO执行一些额外的业务处理,但这仍然会导致一个非常简单的代码结构来传输相当复杂的数据结构。通常它也非常快,因为我已经对数据库进行了一次调用,并且监视和优化一个存储过程非常简单。