Asp.net mvc ASP.NET MVC:保存用户正在编辑的实体的位置
这里有一个简单的问题:用户希望以类似网格的方式编辑产品:选择并单击添加,选择并单击添加。。。他们看到更新的产品列表。。。然后单击“完成”,应保存订单 但是,每个“添加”都必须转到服务器,因为它涉及服务器端验证。此外,验证在域实体(比如Order)内——也就是说,为了进行验证,我需要调用Order.Add(product),然后Order决定是否可以添加产品 问题是,如果我将产品添加到订单中,它会保持更改,因此即使用户不单击“完成”,更改仍将存在 好的,在用户单击Finish之前,我可能不应该修改订单。但是,如何验证产品呢?这应该由订单实体完成-如果产品已经添加,如果产品与其他产品不冲突,等等 另一个问题是,我必须将产品添加到订单中,并根据其新状态“重建视图/HTML”(因为它可能会发生很大变化)。但是如果我不坚持订单更改,下一次添加将从每次相同的订单开始,而不是从更新的订单开始。也就是说,我需要以某种方式跟踪订单的更改 我看到了几种解决方案:Asp.net mvc ASP.NET MVC:保存用户正在编辑的实体的位置,asp.net-mvc,domain-driven-design,Asp.net Mvc,Domain Driven Design,这里有一个简单的问题:用户希望以类似网格的方式编辑产品:选择并单击添加,选择并单击添加。。。他们看到更新的产品列表。。。然后单击“完成”,应保存订单 但是,每个“添加”都必须转到服务器,因为它涉及服务器端验证。此外,验证在域实体(比如Order)内——也就是说,为了进行验证,我需要调用Order.Add(product),然后Order决定是否可以添加产品 问题是,如果我将产品添加到订单中,它会保持更改,因此即使用户不单击“完成”,更改仍将存在 好的,在用户单击Finish之前,我可能不应该修改
- 嗯,我想我可以使用TempData(和MvcContrib助手)重定向到GET。因此,在POST to/Edit之后,我处理业务逻辑,获取新数据以供查看,并从MvcContrib执行重定向到操作(数据),该操作通过TempData传递数据。但是由于TempDate是。。。临时雇员F5之后,所有数据都将丢失。不起作用。该死的数据应该存储在某个地方,这样或那样
这个问题常见吗?如何解决类似的问题?最佳实践是什么?这在很大程度上取决于您如何实现您的对象/验证,但您的选项5可能是最佳方案。如果您不喜欢AJAX,那么可以通过将已添加但未保存的条目的相关数据写入隐藏字段来完成相同的任务 换言之,流的结尾是这样的:
这些是唯一可以通过重定向和刷新保持的存储位置。如果我是你,我会想出类似选项5的方法。既然你说你对Ajax很满意,你可以试试这个。但在执行此操作之前,应该将验证逻辑移到Order.Add()方法之外。也许您可以将其移动到另一个名为Validate()的公共函数,该函数返回bool。您仍然可以在Add()方法中调用相同的Validate(),从而在添加订单之前进行必要的验证
现在,如果我对此有完整的发言权,我甚至不会在添加/编辑产品时进行验证。只要客户点击finish,我就会进行验证。这将是最简单的解决办法。但是,也许我遗漏了一些东西。Ajax是我的拿手好戏,我不需要隐藏,我需要的是