Asp.net mvc 3 使用大规模ORM填充dropdownlist?

Asp.net mvc 3 使用大规模ORM填充dropdownlist?,asp.net-mvc-3,orm,drop-down-menu,massive,Asp.net Mvc 3,Orm,Drop Down Menu,Massive,我使用MVC3和大规模ORM 我想知道如何使用海量ORM填充dropdownlist,从数据库中获取数据 我使用ViewData[“Categoreis”]将类别列表传递给视图。它将数据传递给视图,但当我尝试在浏览器中加载页面时,收到以下错误消息: 数据绑定:“System.Dynamic.ExpandooObject”不包含 名为“CategoryID”的属性 这就是我的dropdownlist的外观: @Html.DropDownListFor(model => model.Categ

我使用MVC3和大规模ORM

我想知道如何使用海量ORM填充dropdownlist,从数据库中获取数据

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

数据绑定:“System.Dynamic.ExpandooObject”不包含 名为“CategoryID”的属性

这就是我的dropdownlist的外观:

@Html.DropDownListFor(model => model.CategoryID, new SelectList(ViewData["Categories"] as IEnumerable<dynamic>, "CategoryID", "Name"), "--Category--")
@Html.DropDownListFor(model=>model.CategoryID,新的选择列表(ViewData[“Categories”]作为IEnumerable,“CategoryID”,“Name”),“--Category-->”)
有人能解决我的问题吗

我使用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);
}

我现在用的是大质量的。以下是我如何从数据库中的表填充国家下拉列表:

这在我的控制器中:

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 });
这是my
DetailsModel中的
Countries
属性

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

这对我来说很有吸引力。

我觉得有一种称为KeyValues的大规模方法可用于此目的。目前是。它返回字典而不是Expando。我假设您继续在代码的其他地方使用Expando

以下是方法签名:

/// This will return a string/object dictionary for dropdowns etc  
public virtual IDictionary<string, object> KeyValues(string orderBy = "") {...}
///这将返回用于下拉列表等的字符串/对象字典
公共虚拟IDictionary键值(字符串orderBy=“”){…}

我怀疑您正在传递的模型不包含属性
CategoryID
,正如错误消息所说,您是否可以检查您的域模型是否包含该属性,或者您正在传递的模型是否包含所述属性i在我使用的模型中包含CategoryID。我使用dynamic填充dropdownlist。如果我在debugmode中遵循它的工作方式,我将从数据库中获取CategoryID和Name。我只是不知道如何将CategoryID和Name链接到我的selectlist中的值和文本字段。也许这个链接可以帮助我如何使用它?我真的不明白那个代码。@Raskolnikoov,你从应用程序中删除了所有ViewBag吗?“当我说“所有”时,我指的是“所有”和“来自任何地方”。是的,这里没有viewdata/viewbag。@Raskolnikoov,那么我展示的代码应该可以完美地工作。我已经测试了它,并在我的许多项目中使用它,没有任何问题。也许你可以发布一个缩小版的代码来重现问题?你有没有在项目中使用过大规模ORM(使用动态的)?这就是我在这个项目中使用的。我不知道你正在使用的ORM与ASP.NETMVC有什么关系。您应该始终从控制器动作定义视图模型并将其传递给视图,并且永远不要传递任何动态或任何对象。
@Html.LabelFor(m => m.Country)
@Html.DropDownList("Country", Model.Countries)
@Html.ValidationMessageFor(m => m.Country)
/// This will return a string/object dictionary for dropdowns etc  
public virtual IDictionary<string, object> KeyValues(string orderBy = "") {...}