MVC5:在填充的SelectList()中插入新值?

时间:2015-02-10 16:44:57

标签: c# asp.net-mvc razor viewbag selectlist

在我的MVC5应用程序的主INV_Assets控制器中,我有Edit()的方法,它通过ViewBag传递几个填充的SelectLists(),以允许用户从所有可用的实体中选择我的数据库的其他表格中的相关列表 - 请注意,如果有更好的做法而不是通过ViewBag,请随时指导我以更好的方式。

        // GET: INV_Assets/Edit/5
        public async Task<ActionResult> Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            INV_Assets iNV_Assets = await db.INV_Assets.FindAsync(id);
            if (iNV_Assets == null)
            {
                return HttpNotFound();
            }
            ViewBag.Location_Id = new SelectList(db.INV_Locations, "Id", "location_dept", iNV_Assets.Location_Id);
            ViewBag.Manufacturer_Id = new SelectList(db.INV_Manufacturers, "Id", "manufacturer_description", iNV_Assets.Manufacturer_Id);
            ViewBag.Model_Id = new SelectList(db.INV_Models, "Id", "model_description", iNV_Assets.Model_Id);
            ViewBag.Status_Id = new SelectList(db.INV_Statuses, "Id", "status_description", iNV_Assets.Status_Id);
            ViewBag.Type_Id = new SelectList(db.INV_Types, "Id", "type_description", iNV_Assets.Type_Id);
            ViewBag.Vendor_Id = new SelectList(db.INV_Vendors, "Id", "vendor_name", iNV_Assets.Vendor_Id);
            return View(iNV_Assets);
        }

我的列表目前填充正常,但为了便于使用,我想插入一个值&#34;添加新的&#34;在每个列表中,单击时将打开相关实体的相关Create()视图的弹出窗口(部分视图?)。例如,如果Locations SelectList()有&#34;添加新&#34;点击,我想打开我的Create地点视图。

有人可以提供一个如何做到这一点的例子吗?

我一直在寻找如何在SelectList()中插入新值,但我似乎遇到的大部分内容都是使用放弃SelectList()代替Html.DropDownList()的示例{1}},虽然我不确定为什么?

1 个答案:

答案 0 :(得分:1)

SelectList类继承IEnumerable<SelectListItem>,用于填充下拉列表。

给定ViewModel对象具有以下属性:

public SelectList Options
{
    get
        {
            var items = Enumerable.Range(0, 100).Select((value, index) => new { value, index });
            SelectList s = new SelectList(items, "index", "value");
            return s;
        }
 }

public int SelectedOption { get; set; }

view

@Html.DropDownListFor(m => m.SelectedOption, Model.Options, "Add New", new { @class = "form-control" })

为了对弹出窗口做你想做的事,你可能需要一些javascript来处理这个问题。

如果您不希望DropDownListFor()中的“添加新内容”,则需要先将其手动添加到收藏中,然后再将其添加到视图中。

希望这有帮助。