如何在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行代码
谢谢你的帮助!
尝试创建一个新的选择列表,并将您的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")
希望这对你有用