MVC3& EF4如何使用viewmodel将数据传递到选择列表

时间:2011-08-02 11:57:16

标签: asp.net-mvc-3 entity-framework-4 viewmodel

我有一个viewmodel,我在Create get动作中构建,

public class SiteAdminCreateViewModel
{
    public int CustomerId { get; set; }
    public string ContactName { get; set; }
    [Required(ErrorMessage = "A contact number is Required")]
    public string ContactNo { get; set; }
    public IEnumerable<SelectListItem> CustomerNames { get; set; }
}

public ViewResult Create(SiteAdminCreateViewModel model) 
    {
        var query = from cs in repository.CustomerSites
                    select new SiteAdminCreateViewModel
                    {
                        CustomerId = cs.Customer.CustomerId,
                        ContactName = cs.ContactName,
                        ContactNo = cs.ContactNo,
                        CustomerNames = ??

                    };
        return View(query.ToList());            
    }

在viewmodel中我有一个定义为CustomerNames的选择列表,我希望能够使用该选择列表插入从Customers表中获取的CustomerId值(也在viewmodel中定义),该表是一个单独但相关的实体,

有谁可以帮助我如何设置控制器中的选择列表以从Customer实体接收CustomerNames列表?

当我更改其声明以接受viewmodel时,我的视图会抛出异常,

The model item passed into the dictionary is of type  'System.Data.Entity.Infrastructure.DbQuery`1[CustomerOrders.WebUI.Models.SiteAdminCreateViewModel]', but this dictionary requires a model item of type 'CustomerOrders.WebUI.Models.SiteAdminCreateViewModel'.

感谢任何帮助/建议。

1 个答案:

答案 0 :(得分:3)

public ActionResult MyController(SiteAdminCreateViewModel model)
{
 var query = from cs in repository.CustomerSites
                select new SiteAdminCreateViewModel
                {
                    Value= cs.Customer.CustomerId,
                    Text= cs.ContactName
                };
    ViewBag.CustomerNames=query.ToList();
    return View(model);
}

内部视图

@Html.DropDownListFor("CustomerNames")