2017-01-03 15 views
0

複数のコントローラから継承できる汎用アクションメソッドを作成する方法を探しているので、MVCで異なるコントローラとテーブルに対して同じメソッドを繰り返す必要はありません。私は、これが複数のクラスで頻繁に行う必要があるCRUDの多くに適用できると思います。例えば、ここで私は複製したいコードがデータベース呼び出しを使用した汎用アクションメソッドmvc

です:

public ActionResult ToggleQC(int? id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     BACTERIA_EVW bacteria = db.BACTERIA_EVW.Find(id); 
     if (bacteria == null) 
     { 
      return HttpNotFound(); 
     } 
     //add/remove QC status (switch to whichever one it isn't right now) 
     if (bacteria.QCOn == null) //if it hasn't been QCed 
     { 
      bacteria.QCOn = DateTime.Now; 
      bacteria.QCBy = User.Identity.Name; 
     } 
     else //if it has been QCed and they are undoing it 
     { 
      bacteria.QCBy = null; 
      bacteria.QCOn = null; 
     } 
     //save changes 
     db.Entry(bacteria).State = EntityState.Modified; 
     db.SaveChanges(); 
     //return updated QC status partial 
     return PartialView("_QCStatus", bacteria); 
    } 

私は化学のコントローラで同じことを行う必要があるが、私はむしろ、全体のことを繰り返さないと、一つだけを変更したいです部。 BACTERIA_EVWを置き換えるために、モデルタイプをパラメータとしてメソッドに渡すことは可能ですか?どうすればいい?

これが本当に基本的なものである場合はお詫び申し上げます。私は探すべき正しい言葉を知らないかもしれません。私はジェネリックアクションメソッドを探しましたが、ジェネリックコントローラについては何かがありましたが、答えは見つかりませんでした。ジェネリックコントローラクラスに何らかの形でこのようなメソッドを組み込む必要がありますか?

ありがとうございました。

+0

一般的な方法はhttps://msdn.microsoft.com/en-us/library/twcad0zb.aspxコントローラから呼び出すことです – Shekhar

+0

google「抽象メソッド」 – Steve

+0

@Shekhar以上の方法が必要です"db。* BACTERIA_EVW * .Find"やアップデートの保存に対処するために単に "ジェネリックを読んでください"。 –

答えて

0

あなただけcode redundancyを削除する気にならば、あなたはその方法でgeneric controllerを作成し、そこから他のコントローラを継承することができます。

namespace BaseControllers 
{ 
    public class CoolController 
    { 
     public virtual ViewResult Get() 
     { 
      var awesomeModel = new object(); 
      return View(awesomeModel); 
     } 
    } 
} 

そして、あなたの子供のコントローラで:

同じのために発生する可能性が
public class CoolController : BaseControllers.CoolController 
{ 
    public override ViewResult Get() 
    { 
     var ignoredResult = base.Get(); 
     // ViewData.Model now refers to awesomeModel 
     return View("NotGet"); 
    } 
} 

を他のCRUD操作。

+0

こんにちはYaserさん、子コントローラのデータベース呼び出しをどうやって処理しますか?それは、awesomemodelが子クラスで使用しているモデルを参照していることを「知っていますか? – Ella

+0

私は、あなたがその親コン​​トローラを持っている点が何であるか、それらが異なるDBコードを持っているならば、あなたもDBコードを再利用したいと思っていました。コードの再利用が気になる場合は、ジェネリックのリポジトリパターンを使用してコードの重複を避けることをお勧めします。すべてのdbコードは基本クラスで処理できます。 – Yaser

関連する問題