首页 文章

asp.net mvc 4下拉列表与模型不起作用

提问于
浏览
0

我正在将一个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; }

//模型类列表

public IEnumerable<SelectListItem> getPlayerSegmentList()  
{  
List<SelectListItem> myList = new List<SelectListItem>();  
var data = new[]{  
new SelectListItem{ Value="&amp;Segment=1000",Text="1,000+"},  
new SelectListItem{ Value="&amp;Segment=750-999",Text="750-999"},  
new SelectListItem{ Value="&amp;Segment=500-749",Text="500-749"},  
new SelectListItem{ Value="&amp;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表单
@ 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的新手并且遗漏了一些东西 - 非常感谢所提供的任何帮助!

1 回答

  • 1

    您应该使用 Model.PlayerSegmentList 作为用于构建选择选项的源集合 . 因此,将其作为 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 的第一个参数必须是一个集合,而不是你的类对象!这应该会给你一个编译时错误!只需删除该行,因为您已经拥有了 PlayerSegmentList 属性中所需的数据

    所以你清理过的控制器代码就是

    public ActionResult Create()
    {
      var vm = new YourVieWModel();
      var objModel = new playerExtract();
      vm.PlayerSegmentList = objModel.getPlayerSegmentList();
      return View(vm); 
    }
    

    这应该工作假设你的视图是强类型他同样的 YourViewModel

    我还建议使用 P ascal C asing C#类名/方法名:)

相关问题