【问题标题】:Bind Dropdown using mvc4使用 mvc4 绑定下拉菜单
【发布时间】:2014-03-04 23:52:33
【问题描述】:

我需要帮助来绑定模型中的下拉值。

Model.cs

public class BloodGroup
{
    public BloodGroup()
    {
        ActionsList = new List<SelectListItem>();
    }
    [Display(Name="Blood Group")]
    public int Group { get; set; }
    public IEnumerable<SelectListItem> ActionsList { get; set; }     
}

public class ActionType
 {
     public int GroupId { get; set; }
     public string BloodGroup { get; set; } 
 }

在控制器中:

List<ActionType> actionType = GetCourses();
bGroup.ActionsList = from action in actionType
                             select new SelectListItem
                             {
                                 Text = action.BloodGroup,
                                 Value = ((int)action.GroupId).ToString(),
                                 Selected = action.BloodGroup.Equals("A+")?true:false
                             };
return view;

public List<ActionType> GetCourses()
{
        return new List<ActionType> { 
                    new ActionType () {  GroupId = 1, BloodGroup = "A+"}, 
                    new ActionType () {  GroupId = 2, BloodGroup = "B+"},
                    new ActionType () {  GroupId = 3, BloodGroup = "O+" },
                    new ActionType () {  GroupId = 4, BloodGroup = "AB+" },
                    new ActionType () {  GroupId = 5, BloodGroup = "A-"}, 
                    new ActionType () {  GroupId = 6, BloodGroup = "B-"},
                    new ActionType () {  GroupId = 7, BloodGroup = "O-" },
                    new ActionType () {  GroupId = 8, BloodGroup = "AB-" }
             };
  }

它成功返回视图。但是在绑定下拉列表时它会引发错误。

在视图中

@model MyMVC.Models.BloodGroup

@Html.DropDownListFor(m => m.Group, new SelectList(Model.ActionsList, "Value", "Text",true), "-- Select --")</li>

返回错误。

对象引用未设置为对象的实例。

Model.ActionsList 设置为 Null。

我不知道为什么它显示为 null,虽然我继承了模型。

我需要有关如何将 SelectList 值绑定到下拉列表的帮助

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    您需要在您的操作方法中将BloodGroup 类的实例传递给视图,如下所示:

    public ActionResult YourAction()
    {
            List<ActionType> actionType = GetCourses();
            var model = new BloodGroup()
            {
                ActionsList = (from action in actionType
                    select new SelectListItem
                    {
                        Text = action.BloodGroup,
                        Value = ((int) action.GroupId).ToString(),
                        Selected = action.BloodGroup.Equals("A+")
                    })
            };
            return View(model);
    }
    

    那么在你看来:

    @model  BloodGroup    
    @Html.DropDownListFor(m => m.Group, Model.ActionsList,"-- Select --")
    

    通知

    使用上面的示例,它会向您显示没有错误的视图,但您的downdownList 中的选定项目将正确显示。为了正确显示所选项目,您需要将Grop 属性的类型更改为String,如下所示:

    public class BloodGroup
    {
         //
        [Display(Name = "Blood Group")]
        public string Group { get; set; } 
        //
    }
    

    然后使用上述相同的操作方法,使您的视图如下:

    @model  BloodGroup
    @Html.DropDownList("Group", Model.ActionsList, "-- Select --")
    

    【讨论】:

    • 我试过这样但同样的错误抛出。错误来自视图。模型未实例化
    • Lin 的代码似乎没问题,你确定你在正确的视图中(与动作匹配)吗?
    • 嗨@user2798474,我更新了我的答案,我想它会帮助你更多地了解DropdownList。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多