2015-10-17 78 views
0

我正在尋找卸載我的MVC 5項目中的一些控制器功能到一個單一的功能。這兩個視圖都從基本視圖繼承。MVC 5控制器方法合併

CompetitionsViewModel:CompRegisterViewModel 

到目前爲止,這似乎工作:

 private async Task<bool> RegisterUser(RegisterViewModel model, string returnUrl = "") 
      {...} 

調用代碼:

bool passed = await RegisterUser(model); 

在這幾個問題,雖然:

  1. 這是正確的當其中一個控制器使用一個視圖時去做這件事的方法從另一個視圖繼承,並且你想爲此分開的函數?
  2. 有什麼我應該關心在這個函數中使用異步? - 模型錯誤(ModelState.AddModelError)如何在該函數中按預期工作?一切似乎都在表面上起作用,但在這之前,我確實有大量的自定義JQuery處理廣泛的錯誤糾正。
  3. 即使這是一個異步過程,該模型是否仍然會以ref的形式傳遞(現在不太關注,但僅僅是爲了將來的知識)。

基本上這裏發生的是我有一個有能力註冊的購物車。您也可以獨立於購物車進行註冊,因此我使用共享視圖進行註冊。因此,兩個父視圖都實現了子視圖,因此視圖模型的繼承似乎是最智能的路線。

我在桌面上看到的選項是:在兩個控制器函數(重複代碼?..維護夢魘)中重新創建進程,創建一個接口(在添加字段/更改字段時必須在多個位置更新?) ,或者做我所做的 - 一個處理兩者的單個函數,而調用方法處理它們的非繼承功能。

您是否看到第四個更好的選擇,還是我的解決方案看起來可以接受?

回答

1

回答這個問題如下:

  1. 仍不確定最佳實踐,但它做工精細。
    • 至於這是否被認爲是良好的做法,我會發現它是非常糟糕的做法重複代碼,所以採取它是什麼。
  2. 它工作正常 - AddModelError等作品。
  3. 對象在正常情況下通過引用傳遞,所以我現在假設「是」。如果遇到問題會更新。