2010-11-01 73 views
0

我有一個母版頁,它依賴於來自我的頁面的特定模型。因此,對於基本結束碼每一個的ViewResult結束了這樣的事情重複使用冗餘視圖模型代碼mvc

public ActionResult Details(long store_id) 
{ 
    var store = getStore(); 

    var model = new ClientModel<StoreModel>(store) 
     { 
      UserNotifications = new UserNotificationModel(this.CurrentUser) 
     }; 

    return View(model); 
} 

我的控制器中的每一個從BaseController派生,所以我希望把這個冗餘代碼,但我真的不知道最好的採取的方法。

我一般ClientModel的結構是這樣的......

public class ClientModel<T> : ClientModel {} 

public class ClientModel {} 

澄清 的StoreModel是通用的,有很多其他的行動使用不同的視圖模型。我只是想根據它在推動時的外觀來展示。

+0

使用繼承:

基本上,你創建一個基本的控制器:

public class BaseController : Controller { public Model GetModel() {} } 

然後所有的控制器從基本繼承。你可能會把自己畫到一個角落裏。 :) – bzlm 2010-11-01 08:03:20

+0

繼承對於MasterPage/Content Page動態是必需的。我的主頁面依賴於ClientModel,而我的View頁面可以採用可選的PageModel,。該解決方案效果很好。 – 2010-11-01 21:41:54

回答

1
protected ViewResult ClientModelView<T>(T model) 
{ 
    var clientModel = new ClientModel<T>(model) 
     { 
      UserNotifications = new UserNotificationModel(CurrentUser) 
     }; 

    return this.View(clientModel); 
} 
+0

這是解決我的問題,爲什麼downvote – 2010-11-01 15:15:06

0

查看我的類似question。這裏謹慎

public class NewController : BaseController 
{ 

    public ActionResult Details(long store_id) 
    { 

     var model = GetModel(); 

     return View(model); 
    } 

} 
+0

這側重於模型,而我試圖抽象視圖,並允許任何類型的模型 – 2010-11-01 15:15:34