2012-01-02 3 views
1

通常の(完全な)ポストバックとAJAXポストバックを単一のコントローラアクションで処理すると、メソッドが膨大になる可能性が非常に高いです。 if..else例えばCreateのために、二つの動作にそれを分割、しかしリターン(JSON成功の文字列対部分図対定期的なビューを返す)ModelStateエラーのため、異なる取り扱いなど完全なポストバックとAJAXポストバックの両方に対してコントローラが1つ動作するか、2つのアクションに分割されますか?

を扱う文章やCreateAjaxの多くは2を意味します同様のコードのインスタンスを維持する必要があります。

アクションをシンプルにするにはどうすればよいですが、両方のポストバックシナリオをカバーするにはどうしたらよいですか?

答えて

4

私はCreateとCreateAjaxの2つのメソッドを持ち、コードをリファクタリングして、重複したコードをヘルパークラスまたはサービスに入れるようにします。

0

私は、ajaxの部分を担当するすべてのコードを、きれいに見える別のActionResultにすることをお勧めします。多くのオプションがあります

0

、あなたは次のようにワンアクションでそれを扱うことができます。

public ActionResult DoSomething() 
{ 
    return DoSomethingFactory.Do(); 
} 

public ActionResult DoSomethingAjax() 
{ 
    return DoSomethingFactory.Do(); 
} 

public ActionResult DoSomething(...) 
{ 
    if (Request.IsAjaxRequest()) 
     return DoSomethingAjax(..); 
    else 
     return DoSomethingStandard(..); 
} 

private ActionResult DoSomethingAjax(..) { } 

private ActionResult DoSomethingStandard(..) { } 

あなたは、いくつかの工場で作業を行いコンポーネント、および2つのメソッドからの呼び出しを作成することができますポストバックアクションハンドラとAJAXハンドラは、部分クラスを使用して分割できます。

いくつかのアイデア。

+0

これは私の今のものと非常に似ています。それは有効な答えですが、改善はありません。 – mare

+0

@mareもう2つのソリューションがあります...それぞれのコードサンプルが異なります。 –

+0

@mareバリエーションはたくさんありません。有効なアプローチであるため、改善されない可能性があります。 –

関連する問題