2011-09-17 164 views
2

即時通訊使用MVC 3和大規模的ORM。使用Massive ORM填充下拉列表?

我想知道如何使用Massive ORM填充下拉列表以從數據庫獲取我的數據。

我使用ViewData [「Categoreis」]將我的類別列表傳遞給我的視圖。它傳遞的數據的看法,但我得到這個errormessage的,當我嘗試加載該頁面在瀏覽器中:

數據綁定:「System.Dynamic.ExpandoObject」不包含 屬性名稱爲「類別ID 」。

這是我的下拉列表的樣子:

@Html.DropDownListFor(model => model.CategoryID, new SelectList(ViewData["Categories"] as IEnumerable<dynamic>, "CategoryID", "Name"), "--Category--") 

有誰知道我的問題的解決方案?

+0

我懷疑你是通過不包含該屬性的模型'CategoryID'作爲錯誤信息說,你可以檢查你的域模型,或模型你傳遞的包含上述屬性 – Rafay

+0

我有我的模型,即時通訊使用的CategoryID。我使用動態填充下拉列表。如果我遵循調試模式,它是如何工作的,我從數據庫中獲得CategoryID和Name。我只是不知道如何將CategoryID和Name鏈接到我的選擇列表中的值和文本字段。 – Raskolnikoov

+0

也許這個鏈接將幫助http://stackoverflow.com/questions/4740969/how-to-databind-a-gridview-to-an-expandoobject/5145419#5145419 – Rafay

回答

3

目前我正在使用Massive。下面是我如何在數據庫中填充的國家下拉從表:

這是在我的控制器:

DetailsModel model = new DetailsModel(); 
var _countries = new Countries(); //Massive class 
model.Countries = _countries.All().Select(x => new SelectListItem { Value = x.Id.ToString(), Text = x.Name }); 

這裏是Countries屬性,它是在我的DetailsModel

public IEnumerable<SelectListItem> Countries { get; set; } 

在我看來:

@Html.LabelFor(m => m.Country) 
@Html.DropDownList("Country", Model.Countries) 
@Html.ValidationMessageFor(m => m.Country) 

對我來說就像一個魅力。

0

我使用計算機[「Categoreis」]

我會建議你使用模型和忘記的ViewData/ViewBag通過我的類別列表我的看法。例如定義以下視圖模型:

public class MyViewModel 
{ 
    public int CategoryID { get; set; } 
    public SelectList Categories { get; set; } 
} 

,並在控制器中填充的模型,並傳遞給視圖:

public ActionResult Index() 
{ 
    var categories = _repository.GetCategories(); 
    var model = new MyViewModel 
    { 
     // this assumes that categories is an IEnumerable<T> 
     // where T is some domain model having CategoryID and Name properties 
     Categories = new SelectList(categories, "CategoryID", "Name") 
    }; 
    return View(model); 
} 
在強類型視圖

最後:

@model MyViewModel 
@Html.DropDownListFor(x => x.CategoryID, Model.Categories, "--Category--") 
+0

現在沒有同樣的錯誤消息。 :/ – Raskolnikoov

+0

@Raskolnikoov,你從應用程序中刪除了所有的ViewBag嗎?當我說我的意思是所有的和來自任何地方。 –

+0

是的,沒有viewdata/viewbag。 – Raskolnikoov

1

我看起來有一個稱爲KeyValues的Massive方法用於此目的。目前它是line 360 in the source code。它返回一個字典而不是一個Expando。我假設你繼續在你的代碼中的其他地方使用你的Expando。

這裏是方法的簽名:

/// This will return a string/object dictionary for dropdowns etc 
public virtual IDictionary<string, object> KeyValues(string orderBy = "") {...}