1

我已经尝试了一整天,但是我的下拉列表无法加载。它应该是一个简单的应用程序。我需要创建一个新员工,而创建视图为我呈现一个下拉列表,其中填充了来自 StoresMst 表的不同 [Store Names]。这个想法是将员工与商店联系起来。下面是我的代码

在 viewModel 类中

    public class EmployeeStoreViewModel
    {
        private JCOperationsDataContext  db = new JCOperationsDataContext ();

        //public Employee employee { get; set; }
        public IEnumerable<SelectListItem> Stores { get;set;}
        public int storeID { get; set; }         
    }

在创建 ActionLink

        public ActionResult Create()
        {
            //ViewData["PartialStores"] = repository.GetStoreNames();
            var model = new EmployeeStoreViewModel()
            {   
                //Stores= jc.StoreMsts.OrderBy(o=> o.StoreID).ToList<SelectListItem>();

                Stores = jc.StoreMsts
                        .ToList()
                        .Select(x => new SelectListItem
                        {
                            Text = x.StoreID.ToString(),
                            Value = x.StoreName
                        }),                        
            };

            return View(model);
        }

在视图中(添加了对 ModelView 类的引用

<div class="editor-field">
    @{Html.DropDownListFor(model => model.storeID, new SelectList (Model.Stores));}
</div >

页面加载没有错误,但没有呈现和填充 DropDownbox。我错过了什么吗?我正在将 MVC3 与 VS2010 Ultimate 一起使用 请注意:我对 MVC2 进行了同样的尝试,并且确实有效。

4

2 回答 2

2

删除调用中的花括号DropDownListFor。在您的代码中,razor 将其视为常规方法调用并忽略该方法的返回值。使用 razor 输出 html 的正确语法如下。

<div class="editor-field">
    @Html.DropDownListFor(model => model.storeID, new SelectList (Model.Stores))
</div >
于 2012-07-14T12:47:25.880 回答
0

因为您的视图模型中有您的 Stores 对象,并且您在传递它之前设置了该集合,所以您不需要使用“新 SelectList”,您可以在集合中引用该属性。此外,您不需要下拉列表周围的花括号,它不会以这种方式评估。这应该是您所需要的:

<div class="editor-field">
@Html.DropDownListFor(model => model.storeID, Model.Stores);
</div >

编辑:再次查看您的代码后,如果您的下拉列表没有以这种方式加载,您可能需要将集合类型更改为 List 而不是 IEnumerable。

于 2012-07-14T12:56:55.333 回答