2011-06-12 99 views
1

我爲我的網站創建了一個標籤雲部分視圖。部分視圖將包含在網站的所有頁面上。數據來自數據庫。有沒有辦法運行全局控制器中的代碼,所以我不必把它放在每一個控制器的每一個動作上?全網標籤雲

我想避免將這一對每一個動作:

public ActionResult Index() 
{ 
    ViewData["Tags"] = Tags.GetTags(); 
    return View(); 
} 

public ActionResult Index() 
{ 
    return View(Tags.GetTags()); 
} 

這將會是一場噩夢,如果我曾經更改代碼。必須有更好的方式來處理站點每個頁面上的數據庫綁定內容。

回答

3

你總是可以使用ViewModel模式,有一個基類ViewModel對自己的行爲:

public abstract class ViewModelBase 
{ 
    public IEnumerable<Tag> Tags { get; private set; } 

    public ViewModelBase() 
    { 
     Tags = GetTagsFromDatabase(); 
    } 
} 

接下來,只要以後每ViewModel繼承這個基類。

public HomeViewModel : ViewModelBase 
{ 
    ... 
} 

,然後在Controller行動:

public ActionResult Index() 
{ 
    var viewModel = new HomeViewModel(); 
    return View(viewModel); 
} 

希望這有助於。

+1

哈!就是這樣。好主意。 – Darthg8r 2011-06-13 17:34:22

0

您可以將您的全局代碼放在您的MasterPage中,也可以從您的代碼中創建一個自定義控件,並在需要該代碼的頁面中重新使用它。