如何在MVC中保存一个动态下拉列表

本文关键字:一个 动态 下拉列表 MVC 保存 | 更新日期: 2023-09-27 18:04:52

我遇到了一个问题。我目前正试图使一个用户页面,其中一些下拉菜单是可变的,并由他们的"访问级别"确定。然后我想保存数据从视图到一个列表,然后在'Post'控制器方法中处理它。我发现这个链接关于一个可能的解决方案(分配选择列表动态创建MVC下拉),但我仍然遇到问题。

这是我的控制器代码,我用来设置需要生成下拉菜单的数据:

var permData = db.LabPermissions.Where(x => x.AccessLevel == 1).ToList();    
  //sets up generic dropdown data used for all dropdowns
  ViewBag.DropDownData = new List<SelectListItem>
   {
         new SelectListItem{ Value = "0",Text = "No"},
         new SelectListItem{ Value = "1",Text = "Yes"},
   };
   ViewModel obj = new ViewModel();
   obj.DataFromController = permData;
   //other viewmodel data
   return("MyView",obj);

然后我将数据传递给我的视图,看起来像这样(这也是堆栈溢出链接设置视图的方式)

  @for(int i = 0; i < Model.DataFromController.Count(); i++)
        {
        <div class="row">
            <div class="col-md-2">
                <b>@Html.DisplayFor(m => m.DataFromController[i].Lab.LabName)</b> 
            </div>
            <div class="col-md-2">
                @Html.DropDownListFor(m => m.DataFromController[i].Assigner, (SelectList)ViewBag.DropDownData, "Select One")
            </div>
            <div class="col-md-8">
            </div>
        </div>
        }

设置好后,运行应用程序,我收到的错误如下:

 Additional information: Cannot convert type 'System.Collections.Generic.List<System.Web.Mvc.SelectListItem>' to 'System.Web.Mvc.SelectList'

错误放在我的@Html上。在我的视图中,DropDownListFor行代码

谢谢你的帮助!

如何在MVC中保存一个动态下拉列表

尝试创建一个新的选择列表,并将您的selectlistitems放在其中。

@Html.DropDownListFor(m => m.DataFromController[i].Assigner, 
new SelectList(ViewBag.DropDownData, "Value", "Text", "Select One")

或者,因为你有一个ViewModel,你可以添加一个公共属性,可以容纳你的seleclisttitis

public class ViewModel
{
    public IEnumerable<SelectListItem> DropDownData { get; set; }
}

控制器:

var permData = db.LabPermissions.Where(x => x.AccessLevel == 1).ToList();
var vm = new ViewModel();
var list = new List<SelectListItem>
        {
            new SelectListItem{ Value = "-1", Text = "Select One", Selected = true},
            new SelectListItem{ Value = "0",Text = "No"},
            new SelectListItem{ Value = "1",Text = "Yes"}
        };
vm.DropDownData = list;
vm.DataFromController = permData;
return View(vm);

视图:

@model YourNameSpace.Models.ViewModel

@for(int i = 0; i < Model.DataFromController.Count(); i++){
    @Html.DropDownListFor(m => m.DataFromController[i].Assigner, Model.DropDownData)
}

我相信你试图将SelectListItem转换为SelectList,这就是你得到那个错误的原因。我做了同样的功能作为我的项目的一部分,我从数据库中取下拉列表的值。为了显示,这里是我的代码(根据你的模型变量修改了一点)

My Controller方法

public ActionResult GetDropDownList()
        {
            List<SelectListItem> dropDownList= new List<SelectListItem>();
            using (var context = new assessmentEntities())
            {
                 //getting data from the DB
               var result = context.getDataFromDB().toList();
                foreach (var item in result)
                {
                    dropDownList.Add(new SelectListItem() { Text = item.Variable1, Value = item.Variable2});
                }
                ViewBag.DropDownData = dropDownList;
            }
    return View();
        }`

这是我的视图

@Html.DropDownListFor(m => m.DataFromController[i].Assigner,, new SelectList(ViewBag.DropDownData, "Value", "Text")

希望这对你有用