Asp.net mvc 返回逻辑错误的最标准/最正确的方法是什么?

Asp.net mvc 返回逻辑错误的最标准/最正确的方法是什么?,asp.net-mvc,asp.net-mvc-3,error-handling,Asp.net Mvc,Asp.net Mvc 3,Error Handling,NETMVC3,剑道UI网页 典型的例子——有一个数据库和一些表,用户正在编辑数据——添加新条目、删除、更新 除了技术问题(网络连接中断)外,可能还有几个逻辑问题——例如,用户没有写入任何内容的权限,或者数据被锁定,或者用户试图更新同时删除的内容,等等 因此,在这种情况下,我想返回一个错误,这样我就可以用剑道和显示来处理它,比如一些警报对话框(JSalert) 那么,设计得最好、最正确的方法是什么呢?我不是在寻找“哦,好吧,它只是工作”的方法 在这种情况下抛出HttpException是一个好主

NETMVC3,剑道UI网页

典型的例子——有一个数据库和一些表,用户正在编辑数据——添加新条目、删除、更新

除了技术问题(网络连接中断)外,可能还有几个逻辑问题——例如,用户没有写入任何内容的权限,或者数据被锁定,或者用户试图更新同时删除的内容,等等

因此,在这种情况下,我想返回一个错误,这样我就可以用剑道和显示来处理它,比如一些警报对话框(JS
alert

那么,设计得最好、最正确的方法是什么呢?我不是在寻找“哦,好吧,它只是工作”的方法


在这种情况下抛出
HttpException
是一个好主意吗(我有我的问题,因为它是http异常,并且我试图传递的错误与http实际上没有任何关系)?

我将假设您使用的是大多数小部件上以自绑定模式存在的剑道数据源对象(已定义传输部分并触发其自己的CRUD请求)


网格CRUD所关联的操作应在作为输入接收的模型上返回IEnumerable.ToDataSourceResult。如果在处理过程中检测到错误,请通过可在操作中访问的ModelState.AddModelError方法将其添加到ModelState。ToDataSourceResult将检测ModelState中是否存在任何错误自动创建并将它们序列化到JSON响应中(错误字段)。然后,您可以通过订阅DataSource.error对它们进行操作,即使在客户端也是如此(请参阅)。

我将假设您使用的是Kendo DataSource对象,它存在于大多数小部件的自绑定模式中(已定义传输部分并触发其自己的CRUD请求)


网格CRUD所关联的操作应在作为输入接收的模型上返回IEnumerable.ToDataSourceResult。如果在处理过程中检测到错误,请通过可在操作中访问的ModelState.AddModelError方法将其添加到ModelState。ToDataSourceResult将检测ModelState中是否存在任何错误自动创建并将它们序列化到JSON响应(错误字段)。然后,您可以通过订阅DataSource.error对它们进行操作,即使在客户端也是如此(请参阅)。

非常感谢您(也感谢您在行间阅读)但是有一个问题--我假设通过ModelState传递错误是一个通用的解决方案,对吗?至于Kendo,我有一个问题(Kendo)--错误处理程序被触发,警报被显示,但尽管如此,框架假设在同一时间没有错误(一些矛盾),并盲目地更新控件(例如,对于delete,UI中的行被删除)我知道你的意思,我自己也遇到了这个问题,这是我为什么不使用剑道自我绑定的主要原因。我遇到了很多GOTCHA,我经常需要做一个更高规模的业务流程,然后是那些特性允许的。考虑使用MVVM模式,或者使用TeleRik自己的MVVM框架或者我个人最喜欢的淘汰赛。不过,在这种情况下,我会调用transport.read,使用数据库中的“新”副本将控件重新绑定到服务器数据。非常感谢您(也感谢您在行之间进行阅读)。不过有一个问题——我假设通过ModelState传递错误是一个通用的解决方案,对吗?至于剑道,我有一个问题(剑道)--触发了错误处理程序,显示了警报,但尽管如此,框架仍假定同时没有错误(有些矛盾),并盲目地更新控件(例如,对于delete,在UI中删除行)我知道你的意思,我自己也遇到了这个问题,这是我为什么不使用剑道自我绑定的主要原因。我遇到了很多GOTCHA,我经常需要做一个更高规模的业务流程,然后是那些特性允许的。考虑使用MVVM模式,或者使用TeleRik自己的MVVM框架或者我个人最喜欢的淘汰赛。不过,在这种情况下,我会调用transport.read,使用数据库中的“新”副本将控件重新绑定到服务器数据。