2015-08-16 30 views
1

我很新的MVC,我已經創建了模型,視圖和以下型號是採用強制性的MVC

public class Student:Basic 
{ 
    public Guid StudentId { get; set; } 
    public string Name { get; set; } 
    [ForeignKey("SchoolClass")] 
    public virtual Guid StudentClassId { get; set; } 
    public virtual SchoolClass SchoolClass { get; set; } 
} 

這裏視圖中的控制器我想有A類DropDownList的視圖模型。但我不確定如何在不使用View-Model的情況下實現它。許多解決方案要求我使用SelectList for Class創建一個View-Model,並在Controller中填充Class(獲取DB中的所有類),然後在View中使用它。這是唯一的選擇嗎?或者我們可以用其他方式填充DropDown嗎?

+4

你可以在'SelectList'分配給'ViewBag '屬性,但建議使用視圖模型,並具有許多其他優點 - 參考[什麼是MVC中的ViewModel?](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc) –

+0

in這種情況下'ViewBag'只是視圖模型的一部分;) - 當然你可以*視圖代碼*視圖中的所有內容......沒有:**不要** – Carsten

+0

您可以將任何內容傳遞給強類型視圖 - 這意味着您可以直接傳遞模型。或者你可以通過動態ViewBag傳遞任何東西。但是,這兩種方法很快就會變得不切實際,爲了解決它們的問題,無論如何你可能會訴諸ViewModel。 –

回答

1

沒有必要使用模型將選擇列表選項傳遞給視圖。您可以填寫您的選擇列表中的剃刀這樣的:

@{ 
    var listItems = new List<SelectListItem>(); 
    listItems.Add(new SelectListItem 
    { 
     Text = "Item 1", 
     Value = "Item 1" 
    }); 
    listItems.Add(new SelectListItem 
    { 
     Text = "Item 2", 
     Value = "Item 2", 
     Selected = true 
    }); 
} 

@Html.DropDownListFor(model => model.MyValue, listItems, "-- Please choose --") 

或者你可以總是有一個返回List<SelectListItem>靜態方法的一些輔助類:

@Html.DropDownListFor(model => model.MyValue, SelectListHelper.GetOptions()) 
+0

但是如果我想從控制器填充DropDownList值呢?我相信我們可以做Ajax調用,但我認爲這會比ViewModel複雜一點! –

+0

@MohanPrasath如果我想從控制器填充DropDown,我會使用ViewBag或Model進行此操作 – Andrei