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

时间:2010-12-13 19:25:10

标签: c# asp.net-mvc asynchronous

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

到目前为止,这么好。但那时就是ASP.NET async pattern on controllers。您有EditAsync和EditCompleted。在两个不同的EditCompleted方法中,您如何告诉GET除了POST?如果重命名POST操作,则会丢失前面讨论过的好行为。

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

1 个答案:

答案 0 :(得分:6)

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

[ActionName("Edit"), HttpGet]
public void EditGetAsync() { }

public ActionResult EditGetCompleted() { }

[ActionName("Edit"), HttpPost]
public void EditPostAsync() { }

public ActionResult EditPostCompleted() { }