2012-01-05 13 views
1

同じ名前のGETアクションとPOSTアクションを持つAsyncControllerを使用することはできますか?同じ名前のGETとPOSTの両方の非同期コントローラアクションを持つことは可能ですか?

私はこれを試したとき、私はエラーを得た
public class HomeController : AsyncController 
{ 
    [HttpGet] 
    public void IndexAsync() 
    { 
     // ... 
    } 

    [HttpGet] 
    public ActionResult IndexCompleted() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public void IndexAsync(int id) 
    { 
     // ... 
    } 

    [HttpPost] 
    public ActionResult IndexCompleted(int id) 
    { 
     return View(); 
    } 
} 

Lookup for method 'IndexCompleted' on controller type 'HomeController' failed because of an ambiguity between the following methods:
System.Web.Mvc.ActionResult IndexCompleted() on type Web.Controllers.HomeController System.Web.Mvc.ActionResult IndexCompleted(System.Int32) on type Web.Controllers.HomeController

は、それがどのような方法でそれらに共存することは可能ですか、すべての非同期アクションメソッドは一意でなければならないのですか?

+0

を参照してください。http://stackoverflow.com/questions/4432653/async-get-post-and-action-name-conflicts-in-asp-net-mvc –

+0

[HttpPost ]装飾を*完了したメソッド。コントローラによって内部的に呼び出されたものではありませんか?もしそうなら、彼らはPOSTする必要はありません。 –

答えて

0

あなたが複数にIndexAsync方法がありますが、一つだけIndexCompleted方法などができます。

public class HomeController : AsyncController 
{ 
    [HttpGet] 
    public void IndexAsync() 
    { 
    AsyncManager.OutstandingOperations.Increment(1); 
    // ... 
     AsyncManager.Parameters["id"] = null; 
     AsyncManager.OutstandingOperations.Decrement(); 
    // ... 
    } 

    [HttpPost] 
    public void IndexAsync(int id) 
    { 
    AsyncManager.OutstandingOperations.Increment(1); 
    // ... 
     AsyncManager.Parameters["id"] = id; 
     AsyncManager.OutstandingOperations.Decrement(); 
    // ... 
    } 

    public ActionResult IndexCompleted(int? id) 
    { 
    return View(); 
    } 
} 

MethodNameAsyncメソッドの属性のみがMVCで使用されているので、MethodNameCompleted方法には必要ありません)

+0

どのAsyncメソッドが完了しているかを区別する方法があるので、View A対View Bなどを返すことを知っていますか? – Dismissile

+0

@Dismissile viewNameをパラメータとして渡すことができます(たとえば、 'AsyncManager.Parameters [" viewName "] =" ViewA ";')。あるいは、HttpRequestBase.HttpMethodプロパティをチェックします。 –

関連する問題