2013-07-17 73 views
-1

我已閱讀MVC的多次專家說,如果我使用的SelectList,這是最好的在我的模型中定義IEnumerable<SelectList>
例如,在這個question
考慮一個簡單的例子:如何在沒有模型的情況下在View中使用SelectList?

public class Car() 
{ 
    public string MyBrand { get; set; } 
    public IEnumerable<SelectListItem> CarBrands { get; set; } // Sorry, mistyped, it shoudl be SelectListItem rather than CarBrand 
} 

在控制器,人們會做:

public ActionResult Index() 
{ 
    var c = new Car 
    { 
     CarBrands = new List<CarBrand> 
     { 
      // And here goes all the options.. 
     } 
    } 
    return View(c); 
} 

然而,從Pro ASP.NET MVC,我學會了創建新實例的這種方式。

public ActionResult Create() // Get 
{ 
    return View() 
} 
[HttpPost] 
public ActionResult Create(Car c) 
{ 
    if(ModelState.IsValid) // Then add it to database 
} 

我的問題是:我應該如何通過SelectList查看?由於在Get方法中不存在模型,因此似乎無法做到這一點。
我當然可以做到這一點使用ViewBag,但我被告知要避免使用ViewBag,因爲它會導致問題。我想知道我有什麼選擇。

+0

如果您想將數據從控制器傳遞到視圖意味着您應該使用mo del或ViewBag也可以使用ViewData。沒有這個你可以做靜態視圖。 – Chandu

回答

1

您可以創建一個具有你希望你的表格上,然後讓你的SelectList該視圖模型類的屬性的汽車所有屬性的視圖模型

public class AddCarViewModel 
{ 
    public int CarName { get; set; } 
    public string CarModel { get; set; } 
    ... etc 

    public SelectList MyList 
    { 
     get; 
     set; 
    } 
} 

你的控制器看起來像

public ActionResult Create() // Get 
{ 
    AddCarViewModel model = new AddCarViewModel(); 
    return View(model) 
} 

[HttpPost] 
public ActionResult Create(AddCarViewModel c) 
{ 
    if(ModelState.IsValid) // Then add it to database 
} 

MarkUp

@Html.DropDownListFor(@model => model.ListProperty, Model.MyList, ....) 
+0

對不起,我之前嘗試過,但它不起作用。問題在於Controller首先直接創建HttpGet,在那裏我不能使用模型的任何具體屬性,因爲它只是使用'return View()'。 – octref

+0

順便說一下,它應該是IEnumerable ,對吧? – octref

+0

@octref我已經刪除了'IEnumerable <...>'。你的創建視圖應該實例化具有默認屬性的視圖模型 – codingbiz

相關問題