我创建了您所建议的版本(尽管公认相对非 OOP),它对我来说效果很好。
我创建了一个 MasterController 来设置一个数据库实例和一些其他变量。一旦我开始查看我的 CRUD 操作中的相似之处,我意识到这可以被抽象并移动到 master 中的一个方法中。两种方法,其实。
protected ActionResult DisplayValidateAndEditModel<TModel>(TModel model, string modelPrefix,
string editViewName, string successActionName, object routeValues, string successMessage,
string[] includeProperties, bool acceptFiles
) where TModel : class
和
protected ActionResult DisplayValidateAndEditModel<TModel>(TModel model, string modelPrefix,
string editViewName, string successActionName, string successMessage,
string[] includeProperties
) where TModel : class
编辑涵盖创建/读取/更新和删除是删除。清单是控制器中的一行——我只是得到一组模型并添加到 viewdata。
这两种方法都检查它是否是一个帖子。如果不是,他们返回视图。如果是这样的话:
编辑调用 TryUpdateModel 并进行一些 xVal 验证。如果一切正常,它会使用任何 routeValues 重定向到 successAction。如果没有,它会再次显示视图。可以传递 includeProperties 以便我的控制器可以准确指定可以获取更新的内容。并且 acceptFiles 添加了额外的功能,它会查找文件发布,如果存在,则将其放入数据库并在文件记录和模型之间创建链接。
delete 更新模型的 Cancel_Date 和 Cancel_User 属性(我有一个 ICancelable 接口)并重定向到成功操作