2010-08-09 143 views
1
  • 我想在母版頁
  • 用戶控件是一個基本的菜單,列出物品種類
  • 我想動態拉類別列表中插入一個用戶控件從SQL Server
  • 我可以使用代碼背後的Web窗體來做到這一點,但你如何在MVC中做到這一點? 謝謝

Categories.ascx:C#ASP.NET MVC用戶控件

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
<ul> 
<% foreach (string category in Model.Categories) { %> 
    <li> 
    <%= Html.Encode(category) %> 
    </li> 
<% } %> 
</ul> 
+2

這真的是一個Show-Me-Teh-Codez。 – 2010-08-09 22:25:16

+0

@ Maud'Dib,請用該代碼更新該問題,而不是將其放入評論中,謝謝。 – DaveDev 2010-08-09 22:37:14

+0

@DaveDev對不起,這是我的第一篇文章。 – 2010-08-09 23:01:12

回答

0

我會爲所有將使用您的MasterPage的控制器製作一個基礎控制器。在那個基礎控制器中,我會加載你的數據列表來創建菜單(從緩存,sql,不管),並將它存儲在ViewData

如果你想要你也可以爲你的所有模型製作一個基礎模型,它將基於控制器加載你的視圖,然後你可以直接將它加載到擴展這個基類的模型中。

假設您的路線更簡單ViewData,在您的用戶控件中,您可以訪問ViewData並加載菜單,因爲您可以假設所有的控制器都預先加載了這些數據。

+0

謝謝,我不知道爲什麼我從一開始就沒有這樣做。也許是因爲我曾經在高中騎短途巴士。 – 2010-08-09 22:47:23

0

這是你的控制器:

ViewData["CategoryList"] = _categoryService.GetCategoryList(); 

這個存在於一個名爲NameOfMyPartial.ascx文件:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 

<% foreach (var category in (IList<Category>)ViewData["CategoryList"])) { %> 
    // do stuff with category 
<% } %> 

然後在你的主頁面:

<% RenderPartial("NameOfMyPartial"); %> 
+0

這有效,但我不會建議使用ViewData集合。錯誤地輸入這些魔術字符串非常容易,如果您錯誤地輸入錯誤,將不會出現編譯時錯誤。自定義Viewmodels通常是更好的選擇(請參閱http://devermind.com/linq/aspnet-mvc-using-custom-viewmodels-with-post-action-methods/) – 2010-08-09 22:32:06

+0

@Adrian,我同意。我最近在辦公室裏做了一個關於使用ViewData的很大的臭味。一切都應該在視圖模型中。但爲了這個例子,我想盡可能保持簡單。 – DaveDev 2010-08-09 22:35:04

+0

謝謝你們兩位。 – 2010-08-09 22:45:54