我正在使用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--")
有没有人能解决我的问题?
答案 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--")