2013-03-08 208 views

回答

1

假設list是字符串的IEnumerable(即MenuName是字符串)。

在您看來,接受模型IEnumerable<string>

@model IEnumerable<string> 

,然後枚舉它

@foreach(string s in Model) 
{ 
<div> 
    @s 
</div> 
} 
0

你想要做的第一件事就是調用ToList(),否則你可能被執行相同的SQL查詢多次。

public ActionResult Index() 
    { 
     var list = (from m in db.MenuTables 
        select m.MenuName).ToList(); 

     return View(list); 
    } 

其次,我不會只是傳遞一個完整的列表。你應該創建一個ViewModel。這將允許您稍後以較小的努力傳遞更多數據。

 public ActionResult Index() 
    { 
     var model = new IndexModel(); 
     model.Tables = db.MenuTables.ToList(); 
     model.AnotherValue = "MENUS"; 

     return View(model); 
    } 

現在我們在視圖中,您將需要設置模型並迭代表格。

@model IndexModel 

<h3>@Model.AnotherValue</h3> 
<ul> 
@foreach(var table in Model.Tables) { 
    <li>@table.Name<li> 
} 
</ul> 
4

就個人而言,我會得到具有ViewModels,然後強烈輸入您的視圖,該模型的習慣。

model將只顯示您想要顯示的數據。沒有更多,沒有更多。 因此,讓我們假設你想顯示名稱,價格和一些其他元數據。

僞代碼...

//View Model 
public class MenuItem 
{ 
    public string Name { get; set; } 
    public decimal Price { get; set; } 
    public bool IsVegetarian { get; set; ] 
} 

public class IndexViewModel 
{ 
    public IList<MenuItem> MenuItems { get; set; } 
    public string MaybeSomeMessage { get; set; } 
} 

//in Controller 
public ActionResult Index() 
{ 
    // This gets the menu items from your db, or cache or whatever. 
    var menuItemsFromDb = GetMenuItems(); 


    // Lets start populating the view model. 
    IndexViewModel model = new IndexViewModel();  

    // Project the results to your model. 
    IList<MenuItems> menuItems = null; 
    if (menuItemsFromDb != null) 
    { 
     model.MenuItems = (from menuItem in menuItemsFromDb 
          select new MenuItem() { 
           Name = menuItem.Name, 
           Price = menuItem.Price, 
           IsVegetarian = menuItem.IsVegetarian 
          }).ToList(); 
    } 

    // Anything else... 
    model.MaybeSomeMessage = "Hi There!"; 

    return View(model); 
} 

//in View 
@model IndexViewModel 

<h3>@Model.MaybeSomeMessage</h3> 
<ul> 
    @foreach(var item in Model.MenuItems) 
    { 
     <li><a href="#">@item.Name</a> - $ @item.Price</li> 
    } 
</ul> 

等。

注意到我已經跳過了一些錯誤檢查等

點 - >僅通過你所需要的。

起初,你可能會去:跆拳道!這比其他答案長得多! Sif我想寫更多的代碼。

我可以向這個想法提出的最佳答案是,從長遠來看,你會感謝你養成這樣的習慣,因爲視圖應該只知道它需要的確切的數據。沒有更多,沒有更多。發送最少量的數據意味着您有一個非常簡單的視圖,這將使您的支持/調試更好。接下來,您將能夠在掌握更多智能和智能的情況下對您的控制器進行單元測試。

GL!

+1

+!優秀答案 – 2013-03-08 21:26:40

0
 public ActionResult Index() 
    { 
     var list = from m in db.MenuTables 
        select m.MenuName; 

     return View(list); 
    } 

    //In View 

    @model IEnumerable<ProjectName.models.MenuTables> 

    @foreach(var item in Model) 
    { 
     @item.Field_Name 
    } 
+0

這可能會幫助你... – 2016-11-09 11:31:57

相關問題