asp.net 带有模型的 mvc 4 下拉列表不工作
asp.net mvc 4 dropdown list with model isn't working
我正在将 asp.net 表单网站转换为 MVC,但我遇到了下拉列表问题。
模型摘录:
命名空间 adminLte.Models
//然后再往下
[Required(ErrorMessage = "Player Segment Required")]
[Display(Name = "Player Segment")]
public string Segment { get; set; }
public IEnumerable<SelectListItem> PlayerSegmentList { get; set; }
//型号class列表
public IEnumerable<SelectListItem> getPlayerSegmentList()
{
List<SelectListItem> myList = new List<SelectListItem>();
var data = new[]{
new SelectListItem{ Value="&Segment=1000",Text="1,000+"},
new SelectListItem{ Value="&Segment=750-999",Text="750-999"},
new SelectListItem{ Value="&Segment=500-749",Text="500-749"},
new SelectListItem{ Value="&Segment=400-499",Text="400-499"}
};
myList = data.ToList();
return myList;
}
控制器:
//??不确定...
playerExtract objModel = new playerExtract();
objModel.PlayerSegmentList = objModel.getPlayerSegmentList();
ViewBag.pSeg = new SelectList(objModel, "SegmentID", "Segment");
*HTML form*
@Html.LabelFor(model => model.Segment, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DropDownListFor( model => model.Segment, ViewBag.pSeg as SelectList , new { htmlAttributes = new { @id = "Segment", @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Segment, "", new { @class = "text-danger" })
//结果
编译错误
There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'Segment'.
我是 MVC 的新手,缺少一些东西 - 非常感谢提供的任何帮助!
您应该使用 Model.PlayerSegmentList
作为用于构建 select 选项的源集合。因此,将其作为 Html.DropDownListFor
方法调用的第二个参数传递。
@Html.DropDownListFor(model => model.Segment, Model.PlayerSegmentList,
new { htmlAttributes = new { @id = "Segment", @class = "form-control" } })
同样在您的控制器代码中,这一行没有任何意义!
ViewBag.pSeg = new SelectList(objModel, "SegmentID", "Segment");
SelectList
的第一个参数必须是一个集合,而不是你的class对象!那应该给你一个编译时错误!。只需删除该行,因为您已经在 PlayerSegmentList
属性
中拥有所需的数据
所以您清理后的控制器代码将是
public ActionResult Create()
{
var vm = new YourVieWModel();
var objModel = new playerExtract();
vm.PlayerSegmentList = objModel.getPlayerSegmentList();
return View(vm);
}
假设你的视图是强类型的,那么这应该可以工作 YourViewModel
我还建议使用 PascalCasing 用于 C# class names/method 名称 :)
我正在将 asp.net 表单网站转换为 MVC,但我遇到了下拉列表问题。
模型摘录:
命名空间 adminLte.Models
//然后再往下
[Required(ErrorMessage = "Player Segment Required")]
[Display(Name = "Player Segment")]
public string Segment { get; set; }
public IEnumerable<SelectListItem> PlayerSegmentList { get; set; }
//型号class列表
public IEnumerable<SelectListItem> getPlayerSegmentList()
{
List<SelectListItem> myList = new List<SelectListItem>();
var data = new[]{
new SelectListItem{ Value="&Segment=1000",Text="1,000+"},
new SelectListItem{ Value="&Segment=750-999",Text="750-999"},
new SelectListItem{ Value="&Segment=500-749",Text="500-749"},
new SelectListItem{ Value="&Segment=400-499",Text="400-499"}
};
myList = data.ToList();
return myList;
}
控制器:
//??不确定...
playerExtract objModel = new playerExtract();
objModel.PlayerSegmentList = objModel.getPlayerSegmentList();
ViewBag.pSeg = new SelectList(objModel, "SegmentID", "Segment");
*HTML form*
@Html.LabelFor(model => model.Segment, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DropDownListFor( model => model.Segment, ViewBag.pSeg as SelectList , new { htmlAttributes = new { @id = "Segment", @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Segment, "", new { @class = "text-danger" })
//结果 编译错误
There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'Segment'.
我是 MVC 的新手,缺少一些东西 - 非常感谢提供的任何帮助!
您应该使用 Model.PlayerSegmentList
作为用于构建 select 选项的源集合。因此,将其作为 Html.DropDownListFor
方法调用的第二个参数传递。
@Html.DropDownListFor(model => model.Segment, Model.PlayerSegmentList,
new { htmlAttributes = new { @id = "Segment", @class = "form-control" } })
同样在您的控制器代码中,这一行没有任何意义!
ViewBag.pSeg = new SelectList(objModel, "SegmentID", "Segment");
SelectList
的第一个参数必须是一个集合,而不是你的class对象!那应该给你一个编译时错误!。只需删除该行,因为您已经在 PlayerSegmentList
属性
所以您清理后的控制器代码将是
public ActionResult Create()
{
var vm = new YourVieWModel();
var objModel = new playerExtract();
vm.PlayerSegmentList = objModel.getPlayerSegmentList();
return View(vm);
}
假设你的视图是强类型的,那么这应该可以工作 YourViewModel
我还建议使用 PascalCasing 用于 C# class names/method 名称 :)