使用Massive ORM填充下拉列表?

时间:2011-09-17 19:53:31

标签: asp.net-mvc-3 orm drop-down-menu massive

我正在使用MVC 3和Massive ORM。

我想知道如何使用Massive ORM填充下拉列表以从数据库中获取数据。

我使用ViewData [“Categoreis”]将我的类别列表传递给我的视图。它将数据传递给视图,但是当我尝试在浏览器中加载页面时,我收到此错误消息:

  

DataBinding:'System.Dynamic.ExpandoObject'不包含   名称为“CategoryID”的属性。

这就是我的下拉列表的样子:

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

有没有人能解决我的问题?

3 个答案:

答案 0 :(得分: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)

对我来说就像是一种魅力。

答案 1 :(得分: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 = "") {...}

答案 2 :(得分:0)

  

我使用ViewData [“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--")