ASP.NET MVC中的异步GET / POST和操作名称冲突

为ASP.NET MVC创建编辑页面的推荐方法是在名为Edit的控制器上有两个方法:一个GET操作和一个POST操作,两者共享相同的名称但重载不同。 如果编辑失败,则在POST操作上显示validation错误。 然后,即使用户关闭了POST,用户也可以共享或添加URL:URL返回时返回GET版本。

到现在为止还挺好。 但是在控制器上有ASP.NET异步模式 。 你有EditAsync和EditCompleted。 在两个不同的EditCompleted方法中,除了POST之外,你如何告诉GET? 如果重命名POST操作,则会丢失前面讨论的好行为。

有没有一种很好的方法让这两种模式一起工作?

通常,XyzAsync()方法为XyzCompleted()方法提供一些状态对象,告诉它正在执行哪个工作单元,因此XyzCompleted()方法可以检查此对象并执行正确的操作。 但是,如果要为每个动词使用不同的Completed方法,可以通过以下方法实现:

[ActionName("Edit"), HttpGet] public void EditGetAsync() { } public ActionResult EditGetCompleted() { } [ActionName("Edit"), HttpPost] public void EditPostAsync() { } public ActionResult EditPostCompleted() { }