无法绑定Model类的下拉值

时间:2016-06-26 17:52:47

标签: c# asp.net-mvc

我是MVC概念的新手。我目前正在使用网络论坛技术。所以我正在做MVC项目,面对下面的问题。
我的模型类包含如下代码:

 public class Dropdown
 {
    public List<string> drpid;
    public List<string> drpname;
 }

datacontext类是

public class DataContext
{       
    Dropdown drp = new Dropdown();
    public Dropdown Bind_Dropdown()
    {
        drp.drpid =new List<string> { "1", "2" };           
        drp.drpname=new List<string>{"Mumbai","Bangalore"};
        return drp;
    }
}

控制器代码是

 public ActionResult Index()
    {
       DataContext dt=new DataContext();
       var res = dt.Bind_Dropdown();
        return View("Index",res);
    }

最后强类型视图模态类下拉

@model MvcApplication1.Models.Class.Dropdown

 @{
    Layout = null;
  }

 <!DOCTYPE html>

<html>
 <head>
  <meta name="viewport" content="width=device-width" />
  <title>Index</title>
</head>
<body>   
 <p>
    @Html.DropDownListFor(Model => Model.drpname, null);  @*Error here*@
    @Html.ActionLink("Edit", "Edit", new { /* id=Model.PrimaryKey */ }) |

 </p>
</body>

此处无法绑定模态类的下拉值。获取错误&#39;没有类型&#39; IEnumerable&#39;如上所示,其中包含密钥&#39; drpname&#39; 下拉属性是

  • drpid as Data Value字段

  • drpname作为数据文本字段

那么如何解决它。

2 个答案:

答案 0 :(得分:0)

进行此更改

有一个模型类

public class Model1
{
  public string drpid {get; set;}
  public string drpname {get; set;} 
}


 public class Dropdown
 {
    public IEnumerable<SelectListItem> models { get; set; }
 }

在DataContext中填充

public class DataContext
{       
    public List<Model1> Bind_Dropdown()
    {
        List<Model1> modellist = new List<Model1> { new Model1 {drpid="1", drpname= "Mumbai"},
                                          new Model1 {drpid="2", drpname= "Bangalore"}};           
        return modellist;
    }
}

行动方法

 public ActionResult Index()
    {
       DataContext dt=new DataContext();
       var res = dt.Bind_Dropdown();
       Dropdown drp = new Dropdown();
       drp.models = res.modellist.Select(m => new SelectListItem {Value = m.drpid, Text = m.drpname}).ToList();

        return View("Index",drp);
    }

在视图中

@Html.DropDownListFor(model => model.models.Model1.drpid, Model.models)

答案 1 :(得分:0)

使用SelectLists,您可能最好创建一个城市列表作为一个类,并迭代这些。您可以将SelectListItems添加到SelectList。这可能不是让您的项目绑定的最佳方式,但我使用您的代码执行此操作:

模型(将SelectList添加为第三个属性):

public class Dropdown
{
    public List<string> drpid;
    public List<string> drpname;
    public SelectList items;
}

控制器:

public ActionResult Index()
    {
        DataContext dt = new DataContext();
        Dropdown res = dt.Bind_Dropdown();

        IList <SelectListItem> selectList = new List<SelectListItem>();

        for (int i = 0; i < res.drpname.Count; i++)
        {
            var selectListItem = new SelectListItem
            {
                Value = res.drpid[i],
                Text = res.drpname[i]
            };

            selectList.Add(selectListItem);
        }

        res.items = new SelectList(selectList, "Value", "Text");

        return View("Index", res);
    }

然后将视图中的DropDownFor帮助器更改为:

@Html.DropDownListFor(Model => Model.drpid, Model.items, "")

这会显示您的下拉列表,您可以选择。但同样,这是一个快速解决方案,并且有更好的解决方案。